シェル組み込みコマンドを具体的に実行する方法

シェル組み込みコマンドを具体的に実行する方法

現在のシェルで次のコマンドを実行するか、そのコマンドを入力している状況を考えてください.bashrc

alias source='echo hi'
alias .='echo hi'
alias unalias='echo hi'

またはfunction source(){ echo hi; }待ってください。

バイナリコマンドでは、次の絶対パスを使用できます。/bin/lsしかし、現在のシェルでこれらのシェル組み込みコマンドを具体的に実行するには?

答え1

Bashには次のコマンドがありますbuiltin

builtin: builtin [shell-builtin [arg ...]]
Execute shell builtins.

Execute SHELL-BUILTIN with arguments ARGs without performing command
lookup.  

例えば

$ cat > hello.sh
echo hello
$ source() { echo x ; }
$ source hello.sh
x
$ builtin source hello.sh
hello

builtinしかし、書き換えに邪魔になることはありません。

関数ではなくエイリアスを解決する別の方法は、単語(部分)を引用することです。

$ alias source="echo x"
$ source hello.sh 
x hello.sh
$ \source hello.sh
hello

答え2

\sourceまたは'source'、または...などのコマンド名の一部を引用して、別名を常に無視することができます''source(他のシェルでは許可されているがzsh許可されていない別名を定義しない限り)。

commandなどの接頭辞を使用して、POSIXシェルで関数をバイパスできます。 bashまたはzshでは組み込み機能を強制する代わりにcommand source使用できます(対応する名前の組み込み機能がない場合は代替機能を照会しますが、zshでは(他のシェルをシミュレートする場合を除く)組み込み機能を完全にスキップします)。たとえば、unset 機能を使用できます。builtincommandcommandPATHcommandunset -f source

builtinをすべてオーバーライドまたは無効にした場合は、このシェルインスタンスを適切な状態に復元することを放棄できます。commandunset

関連情報