Dari komentar Anda, Anda tampaknya bingung tentang apa itu shell . Kernel bertanggung jawab untuk mengelola sistem. Itu adalah bagian yang benar-benar memuat dan menjalankan program, mengakses file, mengalokasikan memori, dll. Tetapi kernel tidak memiliki antarmuka pengguna; Anda hanya dapat berkomunikasi dengannya dengan menggunakan program lain sebagai perantara.
Shell adalah program yang mencetak prompt, membaca sebaris input dari Anda, dan kemudian mengartikannya sebagai satu atau lebih perintah untuk memanipulasi file atau menjalankan program lain. Sebelum penemuan GUI, shell adalah antarmuka pengguna utama dari OS. Pada MS-DOS, shell dipanggil command.com
dan beberapa orang pernah mencoba menggunakan yang berbeda. Di Unix, bagaimanapun, sudah ada banyak shell yang bisa dipilih pengguna.
Mereka dapat dibagi menjadi 3 jenis. Shell yang kompatibel dengan Bourne menggunakan sintaks yang berasal dari shell Bourne yang asli . Kerang C menggunakan sintaksis dari kerang C yang asli . Lalu ada cangkang non-tradisional yang menemukan sintaks mereka sendiri, atau meminjam satu dari beberapa bahasa pemrograman, dan umumnya jauh kurang populer daripada dua jenis pertama.
Perintah bawaan hanyalah perintah yang dijalankan oleh shell itu sendiri, alih-alih menafsirkannya sebagai permintaan untuk memuat dan menjalankan beberapa program lain. Ini memiliki dua efek utama. Pertama, biasanya lebih cepat, karena memuat dan menjalankan program membutuhkan waktu. Tentu saja, semakin lama perintah dijalankan, semakin kecil waktu muat dibandingkan dengan keseluruhan waktu berjalan (karena waktu muat cukup konstan).
Kedua, perintah bawaan dapat memengaruhi kondisi internal shell. Itu sebabnya perintah seperti cd
harus built-in, karena program eksternal tidak dapat mengubah direktori shell saat ini. Perintah lain, seperti echo
, mungkin built-in untuk efisiensi, tetapi tidak ada alasan intrinsik mereka tidak bisa menjadi perintah eksternal.
Perintah mana yang terpasang di dalam tergantung pada shell yang Anda gunakan. Anda harus membaca dokumentasinya untuk daftar (mis., bash
Perintah bawaan tercantum dalam Bab 4 manualnya ). The type
perintah dapat memberitahu Anda jika perintah adalah built-in (jika shell Anda adalah POSIX-kompatibel), karena POSIX mengharuskan type
menjadi built-in. Jika which
bukan built-in di shell Anda, maka itu mungkin tidak akan tahu tentang built-in shell Anda, tetapi hanya akan mencari program eksternal.
Ada tiga tingkat utilitas bawaan:
Beberapa utilitas benar-benar bagian dari shell sebagai bahasa pemrograman, meskipun mereka bukan kata-kata yang dilindungi undang - undang . Mereka adalah aliran kontrol utilitas (
.
,:
,break
,continue
,return
,trap
,exit
,exec
,eval
), parameter-terkait utilitas (set
,unset
,shift
,export
,readonly
,local
¹,typeset
¹), alias utilitas (alias
²,unalias
²) dantimes
³. Ini khusus built-in mendapatkan perlakuan khusus:foo=bar utility
memiliki arti yang berbeda: ini merupakan penugasan parameter biasa (yaitu setara denganfoo=bar; utility
), alih-alih menetapkan ke lingkungan selama durasi utilitas saja.Beberapa utilitas perlu diimplementasikan di dalam shell karena mereka bertindak pada pengaturan internal shell. Ini termasuk:
cd
,dirs
,pushd
,popd
;bg
,disown
,fg
,jobs
,wait
;builtin
,command
,hash
,read
,type
,ulimit
,umask
;fc
,history
,bind
.echo
,printf
,test
,true
,false
.Shell canggih seperti bash , ksh dan zsh biasanya memiliki lebih banyak built-in, seringkali untuk mengimplementasikan fitur-fitur non-standar (biasanya untuk interaksi). Manual dari masing-masing shell akan memberi tahu Anda apa perintah built-in, meskipun beberapa shell ( zsh , setidaknya) mendukung modul yang dapat dimuat secara dinamis yang dapat memberikan lebih banyak built-in.
¹ Tidak diketahui POSIX, tetapi khusus di ksh dan beberapa shell lainnya.
² Biasa di POSIX, tetapi khusus di ksh dan beberapa kerang lainnya.
³ In
ksh
,times
adalah pembungkustime
kata kunci: ini adalah alias untuk{ { time;} 2>&1;}
. Perhatikan bahwa POSIX memungkinkantime
untuk menjadi utilitas eksternal dengan penguraian biasa atau kata kunci yang berlaku untuk seluruh pipa (yang ada di ksh, bash in zsh).sumber
while IFS= read -r line
?read
bukan builtin khusus, jadiIFS=read
setel variabel hanya selama durasi perintah.Builtin adalah perintah yang disediakan oleh shell, bukan oleh program eksternal. Berikut adalah daftar untuk
bash
builtin (mereka juga terdaftar di halaman bash man) danzsh
builtin .ksh
menyediakan daftar dengan menjalankanbuiltin
.Untuk mengetahui apakah perintah tertentu adalah builtin, Anda dapat menjalankan
type command
. Cobatype for
dantype ls
lihat ini.sumber
type
tampaknya melakukan trik; terima kasih untuk itu ... tapi saya masih bertanya-tanya apa artinya "disediakan oleh shell" ... Mungkin saya perlu lebih sepenuhnya memahami bagaimana shell berhubungan dengan kernel .... tetapi tidak pada jam 2 pagi .. Saya akan datang kembali ke ini besokSetiap distro dan shell memiliki kumpulan perintah yang berbeda dengan fungsi shell builtin. Secara umum idenya adalah bahwa shell membangun fungsi yang paling umum dan sederhana untuk menghemat waktu, kecepatan, dan integrasi dengan sisa set fitur mereka. Biaya overhead jauh lebih rendah karena tidak harus meluncurkan proses sistem lain. Namun dimungkinkan untuk mencampur dan mencocokkan. Anda mungkin menjalankan satu shell yang memiliki buildin untuk sesuatu, tetapi memiliki perintah itu di sistem Anda juga. Biasanya builtin akan diprioritaskan, tetapi Anda bisa mengendalikannya.
Anda dapat dengan mudah mengetahui apakah perintah tertentu adalah builtin atau tidak dengan menjalankan
type mycommand
. Sebagian besar halaman shell manual juga memiliki daftar bawaan mereka.Sunting: Gunakan
type
untuk mencari tahu apakah suatu perintah adalah builtin, dan jika tidakwhich
untuk mengetahui dari mana ia akan dieksekusi.sumber
=>"/bin/echo" and
jenis gema echo=>"echo is a shell builtin", but 'which dd
=> "/ bin / dd" dantype dd
=> "dd is / bin / dd" ... jadi, saya bagian tengah perjalanan ke sana ....type
adalah indikator yang lebih baik tentang apa yang sedang dijalankan, tetapi Anda perhatikanecho
adalah builtin dan ada aplikasi dengan nama itu. Jika shell Anda tidak memiliki builtin sistem yang akan dijalankan.which
bukan berarti perintah bawaan, dan jika tidak, ia tidak akan tahu tentang bawaan shell. POSIX mengharuskan itutype
menjadi perintah bawaan, sehingga selalu tahu tentang built-in.which
ketype
atau sekumpulan opsi misalnyaalias which='type -path'
- ini bisa menjadi sumber kebingungan.which
digantikan olehtype
. Saya menggunakan yang, berulang-ulang, tidak tahutype
dan sangat heran untuk belajar, ituwhich
hanya benar, jika memutuskan antara program.