Saya telah melihat pertanyaan ini di situs ini dan ini mendorong saya untuk menanyakan pertanyaan ini. Saya ingin tahu di Unix berbicara apa perbedaan antara skrip executable dan shell?
sumber
Saya telah melihat pertanyaan ini di situs ini dan ini mendorong saya untuk menanyakan pertanyaan ini. Saya ingin tahu di Unix berbicara apa perbedaan antara skrip executable dan shell?
File yang dapat dieksekusi mengacu pada file apa pun dengan set bit yang dapat dieksekusi yang dapat dieksekusi (bahkan jika ada kesalahan dalam menjalankan program yang sebenarnya).
Script shell adalah tipe spesifik dari executable yang dimaksudkan untuk ditafsirkan oleh shell menggunakan #!
arahan untuk menentukan penerjemah.
Sebuah naskah adalah file yang:
Sebuah shell Script adalah script yang interpreter adalah shell . Dalam dunia unix, "shell" mengacu pada keluarga shell yang menyerupai shell Bourne ; shell modern seperti itu (abu, bash, ksh, zsh, ...) sesuai dengan standar shell POSIX . Secara umum, kata "shell" dapat menyertakan penafsir perintah lain seperti csh, tcsh, fish, ...
File yang dapat dieksekusi adalah file apa saja yang dapat dieksekusi. Agar dapat dieksekusi secara efektif, file harus memiliki dua properti:
ls -l
: x
karakter harus ada di kolom izin.Format file harus salah satu yang diakui sistem dapat dieksekusi. Format yang dapat dieksekusi dapat dibagi menjadi beberapa kategori:
#!
diikuti oleh jalur ke file. Untuk mengeksekusi file seperti itu, kernel mengeksekusi program interpreter dan meneruskannya ke script sebagai argumen.Perhatikan bahwa menjadi executable tergantung pada sistem. Sebagai contoh, biner Linux amd64 dapat dieksekusi pada sistem Linux amd64 tetapi tidak pada sistem 32-bit. Biner untuk Android tidak dapat dijalankan pada instalasi Linux normal. Eksekusi Windows hanya dapat dieksekusi di Linux jika Wine ada. Skrip yang dimulai dengan #!/usr/local/bin/ruby
hanya dapat dieksekusi jika ada program yang terletak di /usr/local/bin/ruby
.
Script shell biasanya dapat dieksekusi. Tapi itu bisa tidak dapat dieksekusi, jika Anda tidak memiliki izin untuk menjalankannya. Anda masih dapat menafsirkannya dengan mengirimkannya secara eksplisit kepada penerjemah (mis. bash /path/to/script
) - "minta ditafsirkan" adalah cara mewah untuk mengatakan "eksekusi".
skrip shell:
Script shell adalah serangkaian perintah yang akan ditafsirkan oleh shell (Biasanya sh atau shell yang kompatibel dengan sh, kadang-kadang yang lain.)
Nama skrip dapat, tetapi TIDAK perlu, diakhiri dengan ".sh" atau ".bash" atau ".csh" dll (memberikan petunjuk tentang shell yang seharusnya diluncurkan oleh).
Untuk kejelasan saya akan berasumsi: bahwa nama skripnya script
, dan shell itu harus diluncurkan adalah bash
.
Cara khas untuk meluncurkannya dalam shell adalah: bash /absolute/path/to/the/script
atau bash ./relative/path/to/the/script
. Dengan begitu, tidak perlu memiliki bit yang dapat dieksekusi, karena hanya dibaca oleh bash, yang kemudian mengeksekusi konten.
Hal dapat juga diatur + x (executable) untuk memungkinkan untuk memulai itu langsung dari sesi shell Anda saat ini dengan: / absolute / path / ke / dalam / script (atau ./relative/path/to/the/script). Hati-hati: secara default, ketika diluncurkan dengan cara itu, diluncurkan melalui shell yang Anda ketikkan atau melalui shell posix (perilaku bergantung pada OS), jadi itu mungkin bukan shell yang seharusnya dijalankan. Itu sebabnya Anda dapat (dan harus) menentukan sebagai baris pertama skrip: #! / Path / to / good / shell yang menunjukkan ke OS Anda bahwa skrip tersebut harus benar-benar diluncurkan oleh / path / to / good / shell sebagai gantinya.
dieksekusi:
File executable adalah file yang memiliki bit "x" yang ditetapkan untuk pengguna / grup yang seharusnya diluncurkan oleh. Ini bisa berupa "biner", atau skrip.
Kiat: file /some/file
dapat memberi tahu Anda lebih lanjut tentang konten file. Coba file /usr/bin/bash
atau file /etc/profile
lihat beberapa contoh.