シェルコマンドがプログラムなのか関数なのかを確認するには?

シェルコマンドがプログラムなのか関数なのかを確認するには?

知りたいです。注文する私たちがシェルで呼んでいるのは 機能またはプログラム

答え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シェルは次のことを決定する必要があります。

  1. 一つalias
  2. 機能、
  3. 組み込みコマンド、
  4. 実行可能ファイル。

関連情報