Tautan simbolik dan sudo

10

Saya membuat tautan simbolis:

ln -s /tmp/folder1 /tmp/folder2

Lalu saya pergi ke / tmp / folder2 dan menjalankan pwd:

$ cd /tmp/folder2/
$ pwd
/tmp/folder2
$ sudo pwd
/tmp/folder1 # <-- This is the odd part

Mengapa pwddengan sudomemberikan direktori asli? Saya sedang menulis skrip bash dan memerlukan path absolut dari direktori saat ini. Dengan sudo sepertinya saya tidak bisa mendapatkan direktori asli.

iDev247
sumber
Apakah tujuan Anda agar pwd mengembalikan jalur fisik (/ tmp / folder1) atau jalur logis (/ tmp / folder2) untuk keduanya?
user9517
Tujuannya adalah mengembalikan jalur logis saat menggunakan sudo
iDev247

Jawaban:

14

The pwd Perintah merupakan sebuah shell builtin dan / bin / pwd. Dalam keadaan normal, builtin akan dijalankan sesuai preferensi ke / bin / pwd. Perintah pwd dapat disebut sebagai pwd -Latau pwd -PKeduanya bawaan ke / bin / pwd pwd -Ldari halaman manual

-L, --Logical gunakan PWD dari lingkungan, meskipun mengandung symlink

jadi ketika Anda menjalankan pwd Anda benar-benar menjalankan pwd -L yang berlaku mencetak $ PWD (jika ada). Saat Anda menjalankan sudo pwd, sudo hanya menyediakan variabel lingkungan yang telah diperintahkan untuk diteruskan melalui env_keeparahan. PWD biasanya tidak ada dalam daftar ini sehingga sudo pwd harus mencari tahu di mana ia berada dan pada dasarnya berjalan sepertipwd -P

-P, --hindari semua symlinks secara fisik

Cara untuk memecahkan masalah adalah dengan menggunakan pwd -Pjika Anda secara konsisten menginginkan jalur direktori fisik atau (seperti kata @Felix) untuk menambahkan PWD ke daftar variabel lingkungan untuk disimpan melalui arahan env_keep di sudoers

env_keep += "PWD"  
user9517
sumber
Bekerja! Setelah PWD ditambahkan ke env_keep yang perlu saya lakukan sudo pwd -Luntuk mendapatkan path logis. sudo pwdmengembalikan jalur fisik.
iDev247
6

Dalam bash, pwdadalah builtin. /bin/pwdmenghasilkan perilaku yang sama dengan sudo pwd.

Anda pasti mau

  1. gunakan sudo pwd -L, yang hanya berfungsi jika Anda
  2. termasuk Defaults env_keep=PWDdalam sudoersfile Anda
Felix Frank
sumber