Untuk mencetak variabel $PWD
dan perintah lingkungan direktori kerja saat ini / sekarang pwd
tersedia. Jadi, apa perbedaan penggunaan keduanya? atau Apa yang harus dipilih untuk tujuan tertentu?
sumber
Untuk mencetak variabel $PWD
dan perintah lingkungan direktori kerja saat ini / sekarang pwd
tersedia. Jadi, apa perbedaan penggunaan keduanya? atau Apa yang harus dipilih untuk tujuan tertentu?
Itu tergantung pada apa yang Anda lakukan. Pertama-tama, $PWD
adalah variabel lingkungan dan pwd
merupakan shell builtin atau biner aktual:
$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
Sekarang, bash builtin hanya akan mencetak nilai saat ini $PWD
kecuali Anda menggunakan -P
bendera. Sebagaimana dijelaskan dalam help pwd
:
pwd: pwd [-LP]
Print the name of the current working directory.
Options:
-L print the value of $PWD if it names the current working
directory
-P print the physical directory, without any symbolic links
By default, `pwd' behaves as if `-L' were specified.
The pwd
biner, di sisi lain, mendapat direktori saat ini melalui getcwd(3)
system call yang mengembalikan nilai yang sama seperti readlink -f /proc/self/cwd
. Untuk mengilustrasikan, coba pindah ke direktori yang merupakan tautan ke yang lain:
$ ls -l
total 4
drwxr-xr-x 2 terdon terdon 4096 Jun 4 11:22 foo
lrwxrwxrwx 1 terdon terdon 4 Jun 4 11:22 linktofoo -> foo/
$ cd linktofoo
$ echo $PWD
/home/terdon/foo/linktofoo
$ pwd
/home/terdon/foo/linktofoo
$ /bin/pwd
/home/terdon/foo/foo
Jadi, sebagai kesimpulan, pada sistem GNU (seperti Ubuntu), pwd
dan echo $PWD
sama kecuali Anda menggunakan -P
opsi tetapi /bin/pwd
berbeda dan berperilaku seperti pwd -P
.
Keduanya akan mengembalikan hasil yang sama jika Anda menggunakannya tanpa opsi untuk semua direktori yang berfungsi, termasuk ketika di tautan simbolis.
Namun, dari
man pwd
:Ini berarti mengeksekusi
pwd -P
ketika dalam tautan simbolik yang menunjuk ke beberapa direktori lain yang akan mencetak path ke direktori asli.Sebagai contoh, jika Anda memiliki tautan simbolis
/var/run
yang mengarah ke/run
dan Anda saat ini dalam/var/run/
direktori, mengeksekusiakan kembali:
dan akan sama untuk
pwd
. Namun, jika Anda menjalankan:akan kembali
Jadi, itu tergantung jalur mana yang Anda perlukan: jalur aktual tanpa tautan simbolik atau direktori saat ini yang mengabaikan tautan simbolik. Satu-satunya perbedaan antara
pwd -P
danecho $PWD
adalah ketika ada tautan simbolik.sumber