pwd tanpa symlink

54

Jika saya lakukan pwdsaya perhatikan itu menggunakan symlink apa pun yang saya gunakan untuk masuk ke direktori saat ini. Bolehkah saya memberitahuku direktori "asli" yang saya masuki ... yaitu jalur dari root ke direktori saya saat ini tanpa menggunakan symlink?

JoelFan
sumber

Jawaban:

70

Menurut halaman manual POSIX untuk pwd, -Popsi dapat digunakan:

-P Pathname absolut yang dituliskan tidak boleh berisi nama file yang, dalam konteks pathname, merujuk ke file-file dari tipe tautan simbolik.

Jadi

$ pwd -P

harus apa yang Anda butuhkan.

Steven D
sumber
Saya ingin menunjukkan bahwa informasi ini mudah ditemukan dengan mengetikkan man pwdshell untuk mengetahui opsi untuk perintah ini.
Chud37
7

Built-in shell pwd menggunakan jalur shell melacak ketika Anda cd(dan menyimpannya di $PWD). Ini berarti jika Anda memiliki symlink ke jalur (dalam) yang kompleks, itu akan memberi tahu Anda apa yang Anda ketik untuk berubah ke direktori itu alih-alih jalur nyata. Ini dilakukan untuk memberi Anda apa yang paling Anda inginkan.

/bin/pwdmenggunakan getcwdpanggilan sistem (yang hari ini adalah panggilan pustaka, membaca /proc/self/cwd) yang mengembalikan jalur kanonik untuk direktori saat ini, tidak dapat melakukan semua lintasan symlink.

Seperti yang ditunjukkan Steven D, pwdada -Popsi untuk mengabaikan $PWD. Ini juga memiliki -Lopsi untuk mengembalikan konten $PWD. Halaman manual untuk pwdtidak mengatakan opsi mana yang digunakan secara default tetapi pengalaman memberitahu saya bahwa uraian di atas adalah benar (shell pwdvs. /bin/pwd). Namun Anda mungkin tidak harus bergantung pada itu dan gunakan saja pwd -P.

camh
sumber
2
Perilaku yang Anda gambarkan adalah perilaku pada sistem Linux di mana /bin/pwdGNU pwdketika POSIXLY_CORRECT tidak disetel. Pada sistem POSIX di mana pwdada /bin. /bin/pwdakan menggunakan $ PWD dan dapat mengembalikan jalur dengan symlink. GNU pwd akan berperilaku seperti itu POSIX ketika menemukan variabel POSIXLY_CORRECT di lingkungannya.
Stéphane Chazelas