Tôi muốn biết liệu các lệnh mà chúng ta gọi trong shell là các hàm hoặc chương trình .
Tôi muốn biết liệu các lệnh mà chúng ta gọi trong shell là các hàm hoặc chương trình .
Câu trả lời:
Nó phụ thuộc.
Các lệnh có thể rơi vào nhiều loại: nội dung, bí danh, hàm, thực thi (tập lệnh và nhị phân trong đường dẫn tìm kiếm).
Trên dòng lệnh, chúng chiếm một không gian tên phẳng, duy nhất có thể ghi đè. Có rất nhiều cách để phân loại các chương trình:
$ f () { :; }
$ alias a=cat
$ which f
f ()
{
:
}
Chúng tôi biết rằng đó f
là một chức năng.
$ which a
alias a='cat'
/usr/bin/cat
Chúng tôi biết đó a
là một bí danh.
$ which yes
/usr/bin/yes
Chúng tôi biết rằng đó yes
là một chương trình.
$ builtin echo ; echo $?
0
Vỏ có echo
được xây dựng trong ...
$ builtin cat ; echo $?
bash: builtin: cat: not a shell builtin
1
Sầu nhưng không cho cat
. Nếu có nội dung dựng sẵn hoặc bí danh nhưng bạn khăng khăng gọi chương trình thay vào đó, hãy thêm tiền tố vào lệnh với dấu gạch chéo ngược:
$ 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'
type
tốt hơn là which
cho hầu hết các mục đích. Xem unix.stackexchange.com/q/85249/135943
Định nghĩa của a function
là trả về các giá trị đơn và không xuất ra bất cứ thứ gì. Các hàm Shell nói riêng có thể rất tốt và có thể có đầu ra hoặc các tác dụng phụ khác, vì giá trị trả về của các hàm rất hạn chế.
A command
là một hướng dẫn được đưa ra bởi người dùng để bảo máy tính làm một việc gì đó, ví dụ, thực hiện một chương trình duy nhất hoặc một nhóm các chương trình được liên kết.
A program
là một chuỗi các lệnh (tức là các lệnh) được đưa cho máy tính và có thể hiểu được bởi bộ xử lý trung tâm (CPU) của máy tính. các hướng dẫn này cho biết hoạt động nào mà máy tính sẽ thực hiện trên một tập hợp dữ liệu.
Có nói rằng, functions
là tập hợp con hợp lý của chương trình. Gọi một cái là hoàn toàn trong quá trình của bạn. Đây command
là một chương trình (hoặc shell tích hợp) có thể được thực thi từ shell lệnh. Lệnh thực hiện các chức năng thực hiện một nhiệm vụ. Điều ngược lại là không chính xác.
chdir()
hoặc setenv()
trong trình bao, đối với chúng, là một quy trình cha khác biệt.