知りたいです。注文する私たちがシェルで呼んでいるのは 機能またはプログラム。
答え1
時々違うよね
コマンドは、組み込みコマンド、エイリアス、関数、実行可能ファイル(検索パスのスクリプトとバイナリ)など、さまざまなカテゴリに分類できます。
コマンドラインは単一の単純な名前空間を占めるため、オーバーライドが可能です。さまざまな種類のプログラムを区別する方法はいくつかあります。
$ f () { :; }
$ alias a=cat
$ which f
f ()
{
:
}
私たちはこれがf
機能であることを知っています。
$ which a
alias a='cat'
/usr/bin/cat
私たちはこれがa
エイリアスであることを知っています。
$ which yes
/usr/bin/yes
私たちはこれがyes
プログラムであることを知っています。
$ builtin echo ; echo $?
0
エンクロージャには内蔵型echo
…
$ builtin cat ; echo $?
bash: builtin: cat: not a shell builtin
1
…しかし、一つもありませんcat
。組み込み関数やエイリアスがありますが、プログラム呼び出しに固執する場合は、コマンドの前にバックスラッシュを追加してください。
$ builtin true | printf "%d\n" $?
0
$ alias true=false
$ true ; printf "%d\n" $?
1
$ \true ; printf "%d\n" $?
0
答え2
aの定義はfunction
単一の値を返し、何も出力しません。特に、シェル関数は関数の戻り値が非常に制限されているため、出力やその他の副作用が発生する可能性があります。
A は、command
ユーザーに、1 つのプログラムやリンクされたプログラムのグループを実行するなどのタスクを実行するようにコンピューターに指示するコマンドです。
Aは、program
コンピュータに与えられ、コンピュータの中央処理装置(CPU)が理解できる一連の命令(つまり命令)です。これらの指示は、一連のデータに対して実行する操作をコンピュータに通知します。
しかし、functions
それらはプログラムの論理的なサブセットです。誰かに電話することは完全にプロセス内にあります。これはcommand
コマンドシェル(または組み込みシェル)で実行できるプログラムです。このコマンドは、タスクを実行する機能を実装します。その逆は真実ではありません。
答え3
シェルから呼び出されるコマンドが関数かプログラムかを知りたいです。
はい。
具体的には、テキストを入力してキーを押すと、enter
シェルは次のことを決定する必要があります。
- 一つ
alias
、 - 機能、
- 組み込みコマンド、
- 実行可能ファイル。