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.


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"  

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.