回答:
alias curl='curl --some --default --options'
のエイリアスがcurl
あり、それを使用したくない場合は、バックスラッシュを前に置くとエイリアスが無効になり、curlバイナリが直接実行されます。
これは対話型シェルでのみ適用されることに注意してください。エイリアスはスクリプトでは有効にならないため、そこでは不要です。
\curl
シェル関数をバイパスしないことは注目に値しcurl
ます。そのためには、組み込みコマンドのbashを使用することができますcommand
:command curl ...
\curl ...
あるcommand curl ...
dash
(あなたがのために正しいですが、おそらく他のシェルをbash
せずにexpand_aliases
)ないスクリプトでエイリアスを展開します。
(Bourne / POSIX)シェル仕様では、コマンドワードの任意の文字が引用符で囲まれている場合、インタラクティブシェルでのエイリアス置換が抑制されると記載されています。バックスラッシュはそのための1つの方法ですが、引用符には他のよく知られた方法もあります。単一引用符と二重引用符です。次のすべてがエイリアスの置換を抑制します。
\curl
cur\l
\c\u\r\l
"c"url
"curl"
"c""u""r""l"
'curl'
'cu'"rl"
使用\curl
は、最も一般的で読みやすい方法です。これは標準化された機能であるため、すべてのBourne遺産シェルで機能することが期待できます。
\curl
TeXコマンドのように見えますか?:-)
\curl
は、同じ名前のエイリアスをバイパスする具体的な理由を示します。この方法では、シェル関数ではなくエイリアスのみがバイパスされることに注意してください。どちらかを確実にバイパスします。command curl ...
command() { echo "Not command, lol!"; } ; command -V echo ; \command -V echo ; \command command echo "This is command! (masking despair)"
プリントNot command, lol!
のx 3
command
それ自体をシェル関数に置き換えると、メカニズムが無効になります。あなたの例が示しているの\
は、前述のように、関数をバイパスしないことです。非自滅的な例:date() { echo 'not date'; }; date; command date
。あなたが悪意のあるが心配している場合は改ざんでcommand
、参照stackoverflow.com/a/35931876/45375
command
上書きされません。あなた自身のリンクから:Thus, with no control over the execution environment, you cannot write shell scripts that are fully immune to tampering, unless you know that your code will be executed by dash, ksh, or bash (with the workaround in place)
shopt -s expand_aliases
は、エイリアスの使用前に使用することでスクリプトで使用できます