Mengapa pwd tidak menerima opsi panjang seperti --physical?

11

Ketika saya menampilkan manual untuk pwdperintah, dikatakan bahwa opsi panjang seperti --physicaldidukung

$ man pwd
PWD(1)                           User Commands                          PWD(1)

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

Namun, gagal ketika saya mengetik berikut ini

$ pwd --physical
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]

Mengapa opsi lama tidak berfungsi untuk saya?

Saya menggunakan RHEL 6.4. Tidak ada alias untuk pwd yang dikonfigurasi. Sepertinya itu standar pwd:

$ which pwd
/bin/pwd
Michal Kordas
sumber
1
Halaman manual adalah untuk utilitas mandiri yang bukan bagian dari bash.
Thomas Dickey
7
Gunakan typealih-alih which, karena whichhanya menampilkan perintah, sementara typemenampilkan kata kunci, bawaan, alias, fungsi, dan perintah (dan jalur perintah hash). Untuk detail lebih lanjut, lihat Mengapa tidak menggunakan "yang"? Lalu apa yang harus digunakan?
wjandrea
1
Di sistem saya man pwdada catatan berikut: your shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supportsdi bagian bawah DESCRIPTION.
Nykakin

Jawaban:

26

bashmemiliki perintah bawaan pwdyang digunakan saat Anda mengetik di pwdshell.

Untuk mendapatkan pwdseperti yang dijelaskan oleh halaman manual, Anda perlu menggunakan perintah eksternal secara paksa. Anda dapat melakukan ini dengan menentukan path lengkap ke executable ( /bin/pwddalam kasus Anda) atau dengan mendahului envsebelum baris :, env pwdyang memulai envperintah yang dapat digunakan untuk menambahkan pengaturan ke lingkungan (tetapi yang tidak dilakukan di sini) dan kemudian envmulai perintah yang ditentukan. Karena envtidak memiliki builtin pwd, "nyata" /bin/pwddijalankan.

Keuntungan dari builtin pwdin bash adalah bashmelacak direktori saat ini, sehingga mendapatkan nilainya dengan biaya nol, sedangkan perintah eksternal perlu mencari melalui sistem file untuk menentukan path, yang jauh lebih intensif IO.

Wurtel
sumber
4
Bukan itu cara kerja perintah eksternal. unix.stackexchange.com/a/413225/5132
JdeBP
BTW: Anda juga dapat menonaktifkan shell builtin (setidaknya dalam bash) olehenable -n pwd
derobert
@ JdeBP Dulu aku terakhir kali melihat (dulu sekali :-)); dan sementara itu sekarang menggunakan getcwd()system call, kernel masih melintasi filesystem, yang lebih mudah dilakukan di ruang kernel karena akses ke struktur data yang relevan, Seperti jawaban yang ditautkan menyatakan: "Namun, perhatikan bahwa bahkan pada FreeBSD dan operasi lainnya sistem kernel tidak melacak direktori yang berfungsi dengan sebuah string. "
Wurtel
11

Dokumen manual itu /bin/pwd, tetapi ketika Anda menjalankan pwdAnda menggunakan shell built-in; lihat output dari

type pwd

Built-in shell Anda pwdtidak mendukung opsi panjang (lihat dokumentasi shell Anda; karena Anda menggunakan Bash, help pwdakan memberikan ringkasan).

Stephen Kitt
sumber