Katakanlah Anda memiliki direktori /dir1
dan /dir2/linked
, di mana yang terakhir adalah symlink ke yang sebelumnya.
Ketika Anda cd
ke linked
dan pwd
, Anda mendapatkan output /dir2/linked
. Jika Anda kemudian cd ..
, Anda akan dikenakan /dir2
. Perilaku ini konsisten dengan konsep Anda /dir2/linked
sebelumnya. Namun, seperti yang saya pahami, direktori induk ( ..
) dari direktori apa pun disimpan dalam inode direktori (yaitu: secara fisik di disk). Jelas, karena /dir2/linked
ini benar-benar /dir1
, direktori induk pada inode harus/
Untuk lebih memperumit masalah, sementara di dalam /dir2/linked
, output ls ..
dan cd .. ; ls .
berbeda! Sepertinya cd
menghormati jalan yang disinkronkan, sementara ls
menghormati jalan "fisik". Seperti yang disebutkan dalam pertanyaan ini , ada cd -P
untuk kasus penggunaan ini.
man pwd
menyebutkan direktori kerja "fisik" dan "logis", tetapi saya masih memiliki beberapa pertanyaan saat ini:
- Apakah perilaku ini selalu disediakan oleh
PWD
variabel lingkungan, sebagaimana disebutkan dalamman pwd
? - Mengapa default
cd
danls
memiliki perilaku yang berbeda, jika keduanya perintah shell (yaitu: bukan program)? - Apakah program tipikal (bukan perintah shell) digunakan
PWD
sebagai ganti jalur fisik? Saya menyadari ini tergantung pada implementasinya, tetapi adakah aturan mainnya?
sumber
Jawaban:
bash
"tahu" tentang symlink dan melacak info ini ketika Anda menggunakan symlink untuk masuk ke direktori.Anda dapat memeriksa ini dengan melakukan hal berikut dalam contoh Anda:
Anda perlu memulai bash dengan
PWD
variabel kosong , jika tidak menggunakan trik itu untuk menampilkan jalan "palsu".Perhatikan bahwa
ls
adalah program yang terpisah dan dengan demikian tidak memiliki pengetahuan bash bagaimana Anda tiba di direktori saat ini, sehinggals ..
hanya akan menampilkan isi dari nyata direktori induk, tidak relatif terhadap symlink Anda mengikuti.Sebagian besar program tidak akan bergantung pada variabel lingkungan
CWD
karena ada banyak cara untuk memulai program, melalui bash shell hanya satu sehingga tidak dapat diandalkanCWD
untuk mengandung nilai yang benar (coba aturCWD
ke sesuatu yang salah sebelum melakukanbash -c pwd
, Anda dapat melihatnya memeriksa nilai untuk kewarasan).sumber
PWD
seperti itu, tetapi dengan sendirinya ini tidak menjawab pertanyaan yang saya sebutkanls
disediakan oleh bash, tetapi Anda danhelp
meyakinkan saya sebaliknya. Itu membuat segalanya lebih jelas, terima kasih!PWD
adalah standar dalam POSIX. Anda bisa mengandalkannya untuk diatur. Jika tidak disetel, hal-hal dapat rusak, misalnyapwd
utilitas : Lihat juga variabel Lingkungan .