関連コンテンツに詳細を追加しようとすると質問、私は利用可能なBashの単語のタイプのどれを実行するか指定する方法がわからないことに気づきました。help type
単語の種類に応じて5つの種類があります。
- ニックネーム
- キーワード
- 機能
- 組み込み
- 文書
単語にはいくつかの種類があります(true
これは単なる例であり、より一般的に含まれる単語は次のとおりですcd
)。
$ type -a true
true is a shell builtin
true is /bin/true
特定の同義語を適用するには?これまでは好みの順で次のようになります。
エイリアス:これは他のすべての同義語よりも優先順位が高いため、特別な場合です。これを実行することは、エイリアスが定義されておらず、コマンドが失敗した場合にのみ役立ちます。
$
キーワード:
$
機能:
$
内蔵:
$ builtin true
文書:
$ command true $ $(which true) $ /bin/true
引用符にはエイリアスとキーワードは含まれません。それは、
$ 'true'
関数、組み込み関数、またはファイルのみが実行されます。
ベストアンサー1
質問された内容は実際には意味がありません。
キーワードシェル構文の一部であることを意味する単語です。これはトークン化によって識別されます。これを引用すると、シェルはそれを認識しなくなります。
ただし、ほとんどのシェルではキーワードにエイリアスを指定できます。したがって、エイリアスはキーワードよりも優先されます(実際には早く拡張され、後でより多くのトークン化が行われ、より多くのエイリアス、キーワードを持つことができます)...
エイリアス(コマンド位置でのみ拡張されるzshによって定義されたエイリアスを除くalias -g
)なので、通常はbuiltin the-alias
。
関数は、外部コマンドよりも優先される組み込みコマンドよりも優先します(次に$PATH
使用するコマンドを決定します)。
以下を使用して組み込みを強制できます。
builtin the-cmd and its args
(ただし、標準命令ではないことに注意してください。)
エイリアスを引用して無効にすることができます(一部のシェルでは、引用されたバージョンをエイリアスとして使用することもできます)。
たとえば(ここではzsh構文)。
'while'() echo function while
alias 'while=echo alias while'
while true
実際に出力を書き込むと、エイリアスとキーワードの両方が無効になるため、キーワードは使用できませんalias while true
。while
while
たとえば、次のように関数を呼び出すことができます。
'whi'le whatever
組み込み関数がある場合while
(もちろんwhile
キーワードを持つシェルには含まれていない)、次のように書くことができます。
builtin while whatever
コマンドを呼び出すにはwhile
:
env while whatever
またはzsh
(sh
シミュレーションでない場合):
command while whatever
(他のシェルでは、組み込み機能ではなくcommand
機能のみブロックされます。)
または
/full/path/to/while whatever
もちろん、次のような愚かなことをするのを防ぐ方法はありません。
alias 'while=while "w"hile; do'
"while"() { while "whi"le; done; }
少なくともzshではこれはうまくいきます(しかし愚かです)。