~のため外部コマンドコマンドを引数として使用します。引数はシェルの組み込みコマンドではなく外部コマンドでなければなりませんか?
私は次の2つの例に基づいてこの質問を投げます。
もし組み込みコマンドコマンドをパラメータとして使用できますか?パラメータは組み込みコマンドまたは外部コマンドにできますか?
そうでない場合は、説明とともに反例を提示してください。
答え1
シェル組み込みコマンドはシェルからのみアクセスできるため、外部コマンドでは実行できません。たとえば、外部time
コマンドは他の外部コマンドのみを実行できます。外部コマンドは、シェル組み込み、シェルエイリアス、またはシェル機能を実行できません。
シェル自体は外部コマンド(例:/bin/sh
など)なので、外部コマンドを使用して比較などの/bin/bash
シェルを実行したり、組み込みコマンドを使用してシェルスクリプトを実行したりできます。-c
sh -c 'time echo foo'
sh -c '/usr/bin/time echo foo'
組み込みシェルと同じ名前の外部コマンド(たとえばtime
、、、、...)がある場合、外部コマンドはそのコマンドを実行できますが、echo
同じkill
基本操作を実行してもわずかに異なります(たとえば、他のコマンドラインオプション、異なる出力形式、その他の機能 - 組み込みはkill
シェルジョブ番号で終了することができますが、外部はkill
できません)。
time
あるいは、同じシェル組み込みコマンドは、組み込みコマンドまたはcommand
外部コマンドだけでなく、シェル別名および機能を実行することもできます。
答え2
たとえば、command
内部および外部コマンドを引数として使用できるコマンドがあります。
command
command [-pVv] command [arguments … ]
commandという名前のシェル関数を無視し、引数を使用してコマンドを実行します。シェル組み込みコマンドまたはPATHを検索して、見つかったコマンドのみを実行します。 lsというシェル関数がある場合、関数内で "command ls"を実行すると、関数を再帰的に呼び出すのではなく、外部コマンドlsが実行されます。 -pオプションは、PATHのデフォルト値を使用してすべての標準ユーティリティを見つけることができることを意味します。コマンドが見つからないかエラーが発生した場合、この場合は戻り状態は127、そうでない場合はコマンドの終了状態です。
-Vまたは-vオプションが指定されている場合、コマンドの説明が印刷されます。 -vオプションを使用すると、コマンドを呼び出すために使用されるコマンドまたはファイル名を表す単語が表示されます。 -V オプションは、より詳細な説明を生成します。この場合、コマンドが見つかった場合は戻り状態は 0 で、そうでない場合は 0 以外の値を返します。
enable
orコマンドは、組み込みhelp
コマンドのみを引数として使用します。
このtime
コマンドは、シェル組み込みコマンドとパラメーターを使用できます。