Saya ingin tahu apakah perintah yang kita panggil di shell adalah fungsi atau program .
Saya ingin tahu apakah perintah yang kita panggil di shell adalah fungsi atau program .
Jawaban:
Tergantung.
Perintah dapat jatuh ke dalam beberapa kategori: builtin, alias, fungsi, executable (skrip dan binari di jalur pencarian).
Di baris perintah, ini menempati ruang nama tunggal dan datar yang memungkinkan pengesampingan. Ada banyak cara membedakan jenis program:
$ f () { :; }
$ alias a=cat
$ which f
f ()
{
:
}
Kita tahu itu fadalah fungsi.
$ which a
alias a='cat'
/usr/bin/cat
Kita tahu itu aalias.
$ which yes
/usr/bin/yes
Kami tahu itu yesadalah sebuah program.
$ builtin echo ; echo $?
0
Shell memiliki echobuiltin ...
$ builtin cat ; echo $?
bash: builtin: cat: not a shell builtin
1
... tapi tidak ada untuk cat. Jika ada builtin atau alias tetapi Anda bersikeras memanggil program, awali perintah dengan backslash:
$ builtin true | printf "%d\n" $?
0
$ alias true=false
$ true ; printf "%d\n" $?
1
$ \true ; printf "%d\n" $?
0
sh -c 'type true; f() { echo x; }; type f'
typelebih disukai whichuntuk hampir semua tujuan. Lihat unix.stackexchange.com/q/85249/135943
Definisi a functionadalah mengembalikan nilai tunggal, dan tidak menghasilkan apa pun. Fungsi Shell secara khusus mungkin sangat baik dan dapat memiliki output atau efek samping lainnya, karena nilai pengembalian fungsi sangat terbatas.
A commandadalah instruksi yang diberikan oleh pengguna untuk memberitahu komputer untuk melakukan sesuatu, misalnya, mengeksekusi satu program atau sekelompok program tertaut.
A programadalah urutan instruksi (yaitu perintah) yang diberikan ke komputer dan dapat dimengerti oleh unit pemrosesan pusat (CPU) komputer. petunjuk ini menunjukkan operasi yang harus dilakukan komputer pada sekumpulan data.
Karena itu, functionsadalah bagian logis dari program. Memanggil satu sepenuhnya dalam proses Anda. The commandadalah sebuah program (atau shell built-in) dapat dieksekusi dari shell command. Perintah ini mengimplementasikan fungsi yang melakukan tugas. Yang terjadi adalah sebaliknya.
chdir()atau setenv()di shell yang, bagi mereka, proses induk yang berbeda.