現在のシェルで次のコマンドを実行するか、そのコマンドを入力している状況を考えてください.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 機能を使用できます。builtin
command
command
PATH
command
unset -f source
とbuiltin
をすべてオーバーライドまたは無効にした場合は、このシェルインスタンスを適切な状態に復元することを放棄できます。command
unset