Terima kasih atas semua masukannya. Saya akan mencoba menjawab pertanyaan saya sendiri sekarang dan memberikan panduan lengkap untuk berbagai kemungkinan untuk mengeksekusi skrip dan binari. Harap edit dan komentar dan kami akan dapat menemukan sesuatu yang lengkap dan benar. Inilah saran saya:
Pada awalnya, dua poin untuk disebutkan:
Linux membuat perbedaan antara perintah dan jalur . Sebuah perintah hanya diketik sebagai-adalah pada prompt, dan akan mengeksekusi built-in atau akan menyebabkan Linux untuk mencari biner atau script pada $ PATH.
Agar Linux dapat menafsirkan sesuatu sebagai jalur, ia harus mengandung setidaknya satu garis miring (/). Misalnya dalam ./myScript
, ./
bisa tampak sangat berlebihan - itu ada di sana hanya untuk membuat Linux menafsirkannya sebagai jalur daripada perintah.
Jadi, opsi untuk mengeksekusi biner atau skrip:
Menjalankan biner binary
:
$ binary # when 'binary' is on the PATH, or is a built-in
$ ./binary # when 'binary' is not on the path but in the current directory
$ /home/me/binary # when 'binary' is not on the PATH, and not in the current dir
Menjalankan skrip script
:
File harus memiliki izin menjalankan kecuali dinyatakan sebaliknya.
$ script # execute a script that is on PATH. Will be executed in a new shell.
# The interpreter to use is determined by the she-bang in the file.
$ ./script # execute a script that is in the current dir. Otherwise as above.
$ /a/dir/script # when the script is not on the PATH and not in current dir.
# Otherwise as above.
$ . script # execute a script in the current dir. Will be executed in the
# current shell environment.
$ source script # equivalent to the above *1
$ sh script # executes 'script' in a new shell *2 (the same goes for 'bash ...',
# 'zsh ...' etc.). Execute permission not neccessary.
Tentang she-poni :
Skrip dengan she-bang (mis #!/bin/sh
) pada baris pertama memberitahu penerjemah mana yang akan digunakan.
- Penerjemah ini akan digunakan ketika dieksekusi oleh
./script
atau menggunakan perintah: script
( script
harus ada di PATH)
- Menggunakan
sh script
akan mengabaikan she-bang dan menggunakan, dalam hal ini, sh
sebagai penerjemah
- Menggunakan
. script
atau source
akan mengabaikan she-bang dan menggunakan penerjemah saat ini (karena .
atau source
setara dengan hanya mengeksekusi setiap baris skrip dalam shell saat ini)
Catatan kaki
* 1: Ini hampir benar. Dalam bash mereka memang perintah yang sama, tetapi saat menggunakan source
, script
akan dicari dalam $ PATH sebelum dir saat ini. Itu bash, tetapi dalam shell POSIX-only, source
tidak bekerja, tetapi .
tidak. Jadi alih-alih gunakan yang terakhir untuk portabilitas.
* 2: yang sebenarnya terjadi adalah kita menjalankan binary sh dengan 'script' sebagai argumen, yang akan membuat 'sh' mengeksekusi 'script' di shell baru