cd
selain menjadi builtin shell, sebenarnya juga merupakan program pada OS yang kompatibel dengan POSIX. Mereka harus menyediakan executable independen untuk utilitas reguler, seperti cd
. Hal ini misalnya kasus dengan Solaris , AIX , HP-UX dan OS X .
Jelas, builtin cd
masih wajib karena implementasi eksternal tidak mengubah direktori shell saat ini. Namun, yang terakhir masih bisa bermanfaat. Berikut adalah contoh yang menunjukkan bagaimana POSIX membayangkan bagaimana cd
perintah ini dapat digunakan:
find . -type d -exec cd {} \;
Pada sistem POSIX, oneliner ini akan melaporkan pesan kesalahan untuk semua direktori yang tidak diizinkan cd
masuk. Pada sebagian besar distribusi Gnu / Linux, gagal dengan pesan kesalahan itu:
find: `cd': No such file or directory
Dan inilah jawaban untuk pertanyaan Anda, " Mengapa cd bukan program? " Oleh salah satu penulis Unix yang asli. Pada implementasi Unix yang sangat awal, cd
(dieja chdir
pada waktu itu) adalah program eksternal. Itu hanya berhenti bekerja secara tak terduga setelah fork
pertama kali diterapkan.
Mengutip Dennis Ritchie :
Di tengah kegembiraan kami, ditemukan bahwa perintah chdir (ubah direktori saat ini) telah berhenti bekerja. Ada banyak membaca kode dan introspeksi cemas tentang bagaimana penambahan garpu bisa mematahkan panggilan chdir. Akhirnya kebenaran muncul: dalam sistem lama chdir adalah perintah biasa; itu menyesuaikan direktori saat ini dari proses (unik) yang melekat pada terminal. Di bawah sistem baru, perintah chdir dengan benar mengubah direktori saat ini dari proses yang dibuat untuk menjalankannya, tetapi proses ini segera dihentikan dan tidak memiliki efek apa pun pada shell induknya! Itu perlu untuk membuat chdir perintah khusus, dijalankan secara internal di dalam shell. Ternyata beberapa fungsi mirip perintah memiliki properti yang sama, misalnya masuk.
Sumber: Dennis M. Ritchie, " Evolusi Sistem Pembagian Waktu Unix ", Jurnal Teknis AT&T Bell 63 (6), Bagian 2, Oktober 1984, hal.1577–93
Unix Version 1 (Maret 1971) halaman manual chdir menyatakan:
Karena proses baru dibuat untuk mengeksekusi setiap perintah, chdir tidak akan efektif jika ditulis sebagai perintah normal. Karena itu diakui dan dieksekusi oleh Shell.