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

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

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

ベストアンサー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

おすすめ記事