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 pwd
dengan sudo
memberikan direktori asli? Saya sedang menulis skrip bash dan memerlukan path absolut dari direktori saat ini. Dengan sudo sepertinya saya tidak bisa mendapatkan direktori asli.
bash
shell
sudo
symbolic-link
iDev247
sumber
sumber
Jawaban:
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 -L
ataupwd -P
Keduanya bawaan ke / bin / pwdpwd -L
dari halaman manualjadi 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 melaluienv_keep
arahan. PWD biasanya tidak ada dalam daftar ini sehingga sudo pwd harus mencari tahu di mana ia berada dan pada dasarnya berjalan sepertipwd -P
Cara untuk memecahkan masalah adalah dengan menggunakan
pwd -P
jika 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 sudoerssumber
sudo pwd -L
untuk mendapatkan path logis.sudo pwd
mengembalikan jalur fisik.Dalam bash,
pwd
adalah builtin./bin/pwd
menghasilkan perilaku yang sama dengansudo pwd
.Anda pasti mau
sudo pwd -L
, yang hanya berfungsi jika AndaDefaults env_keep=PWD
dalamsudoers
file Andasumber