Seperti yang dirujuk dalam jawaban yang bagus ini , sistem POSIX memiliki biner eksternal cd
di samping shell builtin. Pada OS X 10.8 itu /usr/bin/cd
. Anda tidak dapat menggunakannya seperti builtin cd
karena keluar segera setelah mengubah direktori kerjanya sendiri. Apa tujuannya?
cd-command
command
posix
kojiro
sumber
sumber
/usr/bin/cd
, hanya shell yang ada di dalamnya./bin/cd
./bin/cd
atau tidak/usr/bin/cd
.Jawaban:
Ini berfungsi terutama untuk memastikan dada alat POSIX tersedia baik di dalam maupun di luar shell (lihat alasan POSIX untuk memerlukannya ).
Sebab
cd
, itu tidak terlalu berguna tetapi perhatikan bahwacd
mengubah direktori tetapi memiliki efek samping lain: itu mengembalikan status keluar yang membantu menentukan apakah Anda dapat kechdir()
direktori itu atau tidak, dan menampilkan pesan kesalahan yang berguna menjelaskan mengapa Anda tidak bisachdir()
ketika kamu tidak bisa.Contoh:
Efek samping potensial lainnya adalah pengotomatisasian direktori.
Pada beberapa sistem, sebagian besar perintah eksternal untuk builtin standar shell diimplementasikan sebagai symlink ke skrip yang sama yang tidak:
Itu mulai shell dan jalankan builtin di dalamnya.
Beberapa sistem lain (seperti GNU), memiliki utilitas sebagai perintah yang benar-benar dapat dieksekusi yang dapat menyebabkan kebingungan ketika perilaku berbeda dari versi bawaan shell.
sumber
cd
perintah eksternal . Mungkin bermanfaat dalam memantau ketersediaan sistem file jarak jauh yang dapat diautomatiskan, atau mungkin sebelum melakukan sesuatu yang sangat penting.Fakta non builtin cd perintah yang tersedia pada dasarnya disebabkan oleh POSIX persyaratan untuk semua builtin biasa menjadi callable oleh perintah keluarga exec
env
,find
,nice
,nohup
,time
danxargs
dikombinasikan dengan fakta beberapa perintah ini tidak sedang sendiri dilaksanakan sebagai builtin.Itu tidak masuk akal karena
cd
menggabungkannya dengan perintah-perintah ini sangat tidak berguna. Berikut adalah beberapa contoh yang dapat dipertahankan:sumber
break, :, continue, . , eval, exec, exit, export, readonly, return, set, shift, times, trap, unset
tidak akan relevan sebagai perintah eksternal sementaracd
builtin reguler yang memiliki beberapa kasus penggunaan yang terdokumentasi sebagai perintah.Selain memeriksa apakah jalur sesuai dengan direktori yang dapat diakses, yang
cd
dapat dieksekusi akan memproses dan menggunakanCDPATH
variabel, dan akan mencetak jalur absolut dari direktori yang diselesaikan jika berhasil digunakan.Ini hanya sangat berguna sesekali, tetapi akan menghemat penerapan kembali logika yang sama untuk mencari direktori yang cocok. Kasus penggunaan konkret adalah menemukan direktori pertama yang ada dari nama tertentu di bawah beberapa orang tua yang mungkin.
cd
juga prosesOLDPWD
untukcd -
, tetapi itu kurang berguna secara konkret karena variabel lingkungan sudah akan tersedia.sumber