Apa perbedaan antara istilah "Shell" dan "Bash"?

11

Apa perbedaan antara "Shell" dan "Bash" dan apa arti istilah-istilah ini?

Sejauh yang saya tahu, tidak ada perbedaan. Tetapi saya telah melihat banyak buku tentang "Shell" dan yang lain tentang "Bash"!

Jadi kalau-kalau saya ingin bekerja dengan Terminal pada Mac OS X dan menulis beberapa skrip bash, saya ingin tahu buku seperti apa yang harus saya gunakan.

R.Hen
sumber
7
Ini adalah perbedaan kelas versus contoh.
Kaz
1
Bahan bacaan yang menarik: unix.stackexchange.com/questions/4126/…
Bernhard
1
shell pertama ditulis oleh seorang pria bernama Bourne. BASH adalah akronim untuk 'Boune Again Shell'. Penting untuk bersenang-senang!
Kinjal Dixit

Jawaban:

31

" Shell " adalah perangkat lunak apa pun yang menyediakan antarmuka ke sistem operasi. Misalnya, explorer.exe adalah shell default di Windows (meskipun ada alternatif ), dan pada OS X Finder menyediakan banyak fungsi yang sama. Pada Linux / * nix, shell dapat menjadi bagian dari lingkungan desktop (seperti Gnome atau KDE ), atau dapat berupa komponen perangkat lunak terpisah yang berada di atasnya (seperti Unity atau Cinnamon ).

Contoh di atas adalah semua cangkang grafis yang menggunakan kombinasi jendela, menu, ikon, dan elemen lainnya untuk menyediakan antarmuka pengguna grafis (GUI) yang dapat berinteraksi dengan menggunakan kursor mouse. Namun, dalam konteks perangkat lunak seperti Bash, atau penulisan skrip, "shell" biasanya diartikan sebagai interpreter baris perintah, yang sebagian besar melakukan tugas yang sama dengan shell grafis, kecuali seluruhnya berbasis teks.

Bash adalah contoh spesifik dari shell command-line, dan mungkin salah satu yang paling terkenal, menjadi default di banyak distribusi Linux serta OS X. Bash dirancang sebagai pengganti shell Bourne (Bash berdiri untuk "Bourne again shell"), salah satu shell Unix pertama .

Contoh dari shell baris perintah pada Windows termasuk cmd.exe (alias Command Prompt) dan PowerShell .

Indrek
sumber
3
Finder biasanya tidak disebut shell pada OS X. Sebagian besar fitur GUI dan manajemen jendela ditangani oleh proses lain.
Lri
1
@LauriRanta Wikipedia tampaknya tidak setuju . Terlepas dari apakah ia memiliki bantuan dari proses lain, tugasnya adalah memungkinkan pengguna untuk berinteraksi dengan OS yang mendasarinya melalui GUI, dan dengan demikian cocok dengan deskripsi shell grafis.
Indrek
1
Saya kira istilah shell grafis juga dapat berlaku untuk aplikasi manajemen file. Tapi itu umumnya tidak digunakan pada OS X, dan Finder lebih seperti Nautilus daripada shell Windows atau Unity.
Lri
6
@LauriRanta: kuis cepat, apa ikon Nautilus?
Lie Ryan
2
@LauriRanta Bukankah Dock akan menjadi kandidat yang lebih baik untuk sebuah shell? Meluncurkan program dan membuka dokumen, Paparan / Spasi / Kontrol Misi, AFAIK Launchpad dan pengalih tugas juga semua fitur Dock.
Daniel Beck
13

Bash adalah salah satu dari beberapa cangkang.

Shell pada sistem Unix atau mirip Unix seperti OSX atau Linux adalah program aplikasi yang menyediakan antarmuka baris perintah ke sistem operasi, memungkinkan Anda mengetik perintah dan menjalankannya. Ada beberapa shell yang berbeda untuk dipilih tetapi mereka semua memberikan wildcarding nama file, perpipaan, di sini dokumen, substitusi perintah, variabel dan struktur kontrol untuk pengujian kondisi dan iterasi.

Shell Unix yang asli adalah shell Bourne , sh, ditulis oleh Stephen Bourne di Bell Labs. Lalu datanglah shell C , yang ditulis oleh Bill Joy di Berkeley, sejak diperbarui sebagai tcsh . Kerang lainnya termasuk kerang Korn , ksh, ditulis oleh David Korn, juga di Bell Labs, dan bash , "Bourne again shell", ditulis oleh Brian Fox untuk proyek GNU sebagai pengganti gratis untuk sh.

Saat ini, bash mungkin adalah shell Unix yang paling populer tetapi banyak orang (termasuk saya) masih lebih suka shell C berdasarkan (apa yang bagi sebagian dari kita sepertinya) sintaksisnya yang lebih bagus. Pada dasarnya, ini masalah selera, jadi saya sarankan membaca artikel Wikipedia yang saya tautkan untuk membantu Anda memulai.

Nicole Hamilton
sumber
2
Shell tidak harus berbasis command-line, ada banyak shell grafis juga, misalnya Nautilus, Windows Explorer, Finder, dll. Poin penting untuk shell adalah itu adalah pembungkus / antarmuka pengguna / shell di sekitar fungsi inti OS / panggilan sistem, yaitu shell menyediakan manajemen sumber daya (mis manajemen file) dan manajemen proses.
Lie Ryan
1
@ LieRyan itu bukan shell, mereka adalah manajer file. Shell memungkinkan interpreter perintah / skrip terintegrasi dijalankan di dalamnya. Lihat jawaban saya. Mampu menjalankan program dari manajer file tidak menjadikannya shell.
Bill Rosmus
@ BillR: Anda harus memberi tahu orang-orang Gnome Shell tentang definisi Anda.
paradroid
2
Saya cenderung setuju dengan Lie Ryan dan paradroid, bahwa kerang grafis sekarang dianggap kerang. Saya sebagai diinvestasikan dalam paradigma baris perintah seperti siapa pun dan menolak menerima kerang grafis sebagai kerang melalui 90-an. Tetapi dengan semua widget panel kontrol dan yang lainnya dalam cangkang grafis modern, saya sekarang setuju bahwa penggunaan yang umum adalah dengan menyebutnya cangkang dan penggunaannya benar. Mereka cocok dengan definisi shell, lapisan antarmuka pengguna yang relatif tipis di sekitar OS yang mendasarinya. Kerang grafis lebih lemah tentang bagaimana orang akan skrip apa pun tetapi banyak pengguna tidak peduli tentang itu.
Nicole Hamilton
6

Istilah 'shell' dinamai dengan baik. Secara harfiah shell di sekitar O / S memungkinkan pengguna untuk berinteraksi dengan komputer. Ketika awalnya dikandung ada sangat sedikit jika ada antarmuka pengguna grafis (tidak ada windows :(). Semuanya dilakukan pada baris perintah. Tetapi bahkan baris perintah membutuhkan tempat tinggal. Ia hidup, dan masih, di shell .

Secara sederhana, agar baris perintah bermanfaat, diperlukan instruksi yang bisa dihubungi. Jadi program dibuat untuk dijalankan di dalam shell agar baris perintah dapat digunakan. Program-program tersebut dikelompokkan dalam paket mereka sendiri, dan dimaksudkan untuk bekerja bersama. Mereka termasuk program seperti "ls" dan "grep", "ps", "sed", dll. Mereka juga termasuk perintah pengalihan file seperti ">" dan "<" dan pipa ("|"). Lebih penting lagi mereka juga memasukkan konstruksi pemrograman seperti operasi kondisional (jika, lalu, lain, untuk loop, sementara loop, cara untuk memeriksa status yang dikembalikan ketika Anda menjalankan pernyataan (misalnya jika Anda menjalankan "ls" apakah itu menemukan sesuatu?), Hal seperti itu). Ini adalah dasar dari skrip baris perintah (shell) yang lebih kompleks,

Ketika seseorang menggunakan istilah 'Bash Shell' mereka berbicara tentang penerjemah baris perintah yang disebut 'Bash' yang berjalan di shell O / S. Anda bisa menganggapnya sebagai kependekan dari 'Bash Shell Interpreter'. Ada penerjemah lain seperti Bourne (Bash adalah 'Bourne Shell yang baru dan lebih baik dan merupakan kependekan dari Bourne Again Shell). Ada juga C-Shell, K-Shell (disukai oleh banyak orang yang menulis skrip shell kompleks), dan varian GNU lainnya. Selama bertahun-tahun sudah menjadi kebiasaan untuk merujuk ke juru bahasa command line tertentu yang Anda gunakan sebagai shell karena yang satu tidak dapat digunakan tanpa yang lain. Tetapi kenyataannya adalah mereka berbeda.

Mengapa mereka dikenal sebagai interpreter baris perintah dan bukan sebagai shell yang sebenarnya: itu karena mereka hidup di shell dan menafsirkan semua perintah seolah-olah mereka sedang menjalankan program. Dan shell tidak peduli apa yang Anda jalankan di dalamnya, selama memenuhi standar yang benar.

Dan mengapa mereka disebut penafsir, itu karena mereka benar-benar penafsir. Bahkan jika Anda tidak secara eksplisit menjalankan skrip (dan skrip sebenarnya hanyalah file teks dari perintah yang Anda buat sehingga Anda dapat menjalankan perintah yang sama berulang-ulang tanpa harus mengetiknya lagi). Misalnya, ambil perintah 'ls' yang rendah hati. Ketika Anda menjalankannya, ia mengembalikan daftar file. Tetapi bagaimana cara kerjanya lebih penting bagi pertanyaan Anda: Ini sebenarnya berjalan di dalam konteks interpreter baris perintah, bahkan jika Anda hanya menjalankan apa yang tampaknya menjadi perintah sederhana. Artinya, ini berjalan seolah-olah itu adalah pernyataan di bagian dari program yang lebih besar. Ini berjalan seolah-olah itu dalam file skrip shell script tanpa benar-benar berada di file skrip shell. File skrip shell anonim.

Apa pun yang Anda jalankan pada baris perintah memiliki kesamaan (apakah itu perintah tunggal seperti 'ls' atau file skrip yang penuh dengan perintah dan iterator dan pernyataan bersyarat): semuanya diproses oleh penerjemah baris perintah; baik itu Bash, C-Shell, K-Shell (default pada AIX btw).

Untuk melihat apa yang saya maksud, buat direktori 'test':

mkdir test

Masukkan dan jalankan perintah berikut

grep hello * 

Anda akan mendapatkan semacam respons seperti 'tidak ada file atau direktori'. Sekarang masukkan perintah

echo $?

($? Katakan, beri tahu saya apa yang Anda temukan di komputer samar berbicara.) Anda harus melihatnya mengembalikan nomor (seharusnya) '2'. Itu adalah kode kembali dari grep yang berarti 'tidak ada file atau direktori'. Sekarang jalankan yang berikut ini:

echo hello > hello.txt
grep hello *
echo $?

Anda akan melihat file 'hello.txt' dikembalikan dari perintah grep awal dan sekarang akan melihat 'echo $?' mengembalikan angka '0' yang berarti itu benar-benar menemukan sesuatu.

Bahkan jika perintah yang tampaknya tidak aktif ini dijalankan, penerjemah baris perintah bertindak seolah-olah mereka adalah bagian dari program yang lebih besar dan melacak nilai kembalinya. Itu sebabnya jika Anda lupa * pada akhir perintah grep itu tidak kembali. Ia tahu pernyataan itu tidak lengkap dan mengharapkan lebih banyak input. Setelah semua Anda mungkin akan memintanya untuk menangkap hasil dari beberapa loop yang sangat sah untuk ditulis dan dijalankan pada baris perintah.

Intinya adalah shell adalah shell, dan interpreter (apa pun nama yang Anda gunakan, 'Bash', k-shell, dll.) Berbeda. Tetapi sering kali mereka digunakan secara bergantian, karena pada suatu saat mereka benar-benar terikat bersama.

Bill Rosmus
sumber
2

Shell adalah antarmuka pengguna berbasis teks.

Bash adalah jenis shell.

HayekSplosives
sumber
2
Apa itu "antarmuka pengguna berbasis tes"? Juga akan menyenangkan untuk sedikit memperluas jawaban Anda. Seperti yang dapat Anda lihat dari jawaban yang lain, selalu membantu untuk memberikan lebih banyak konteks.
slhck
Maaf. Antarmuka pengguna berbasis teks. Bagaimana Anda ingin saya menguraikan hal itu? Shell adalah cara baris perintah Anda untuk berinteraksi dengan kernel sistem operasi. Shell menginterpretasikan perintah Anda dan menyampaikannya ke mesin yang kemudian, pada gilirannya, melakukan operasi yang diperlukan yang relevan dengan perintah yang Anda berikan? Tanpa manual 500 halaman, sulit untuk secara efektif menguraikan pertanyaan ambigu ini. Upaya jawaban cocok dengan upaya pertanyaan. Pertanyaan ini adalah apel untuk jeruk.
HayekSplosives
Jika menurut Anda sebuah pertanyaan menunjukkan usaha sekarang tidak secara otomatis berarti Anda tidak harus berusaha menjawabnya. Jawaban Anda, dibandingkan dengan yang lain, tidak memiliki sedikit detail. Tentu saja terserah Anda untuk menambahkannya.
slhck
Saya menghargai koreksi dan pelajaran dalam tanggung jawab pribadi. Terima kasih telah melindungi mereka yang tidak mau melakukan upaya dari mereka yang melakukannya. Saya benar-benar keluar dari garis lupa berapa banyak saya berutang poster.
HayekSplosives
1

bash adalah salah satu dari banyak kerang yang ada.

Semua kerang memiliki persamaan dan perbedaan. Misalnya skrip yang ditulis dalam bash, mungkin sepenuhnya atau sebagian besar kompatibel dengan shell lain (misalnya zsh ).

Karena fakta yang bashsangat luas, sering kali tersirat bahwa sebuah skrip kompatibel dengannya.

Jika Anda ingin membeli buku, belilah yang ditulis khusus untuk cangkang yang ingin Anda gunakan. Akan lebih baik untuk membaca perbedaan mereka sebelum menghabiskan uang.

dset0x
sumber