Ketika saya menampilkan manual untuk pwd
perintah, dikatakan bahwa opsi panjang seperti --physical
didukung
$ 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
type
alih-alihwhich
, karenawhich
hanya menampilkan perintah, sementaratype
menampilkan 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?man pwd
ada 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 supports
di bagian bawahDESCRIPTION
.Jawaban:
bash
memiliki perintah bawaanpwd
yang digunakan saat Anda mengetik dipwd
shell.Untuk mendapatkan
pwd
seperti yang dijelaskan oleh halaman manual, Anda perlu menggunakan perintah eksternal secara paksa. Anda dapat melakukan ini dengan menentukan path lengkap ke executable (/bin/pwd
dalam kasus Anda) atau dengan mendahuluienv
sebelum baris :,env pwd
yang memulaienv
perintah yang dapat digunakan untuk menambahkan pengaturan ke lingkungan (tetapi yang tidak dilakukan di sini) dan kemudianenv
mulai perintah yang ditentukan. Karenaenv
tidak memiliki builtinpwd
, "nyata"/bin/pwd
dijalankan.Keuntungan dari builtin
pwd
in bash adalahbash
melacak 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.sumber
enable -n pwd
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. "Dokumen manual itu
/bin/pwd
, tetapi ketika Anda menjalankanpwd
Anda menggunakan shell built-in; lihat output dariBuilt-in shell Anda
pwd
tidak mendukung opsi panjang (lihat dokumentasi shell Anda; karena Anda menggunakan Bash,help pwd
akan memberikan ringkasan).sumber