straceが私のrmエイリアスを無視するのはなぜですか?

straceが私のrmエイリアスを無視するのはなぜですか?

私はalias私のrm注文を持っています。コマンドを実行すると、aliasこれが出力されます。

alias rm='rm -i'

これでコマンドを実行すると、期待rmどおりに機能します。

rm ramesh
rm: remove regular empty file `ramesh'? y

ここで、コマンドの実行時に呼び出されるシステム呼び出しについて学習します。そのために、私はstrace次のコマンドについて学びました。ここ特定のコマンドの実行時に呼び出されるファイルをリストします。コマンドは次のとおりです。

strace -ff -e trace=file rm ramesh 2>&1 

コマンドに設定したエイリアスを無視することを除いて、コマンドはうまく機能しますrm。ユーザーに尋ねずにファイルを削除します。

ではstrace、このようにエイリアスを無視しますか?では、なぜそうなのでしょうか?

編集する:

これがそれに関連しているかどうかはわかりませんが、type -a rm私に与えられた結果は次のとおりです。

rm is aliased to `rm -i'
rm is /bin/rm

それでは、この場合、/bin/rm削除前にユーザーにメッセージが表示されない理由を考えましたか?

ベストアンサー1

strace実行されない理由はrm -i次のとおりです。

echo rm

出力がありませんrm -i

エイリアシングは、特定の文字列がコマンドの場所で見つかった場合に自動的に別の文字列に置き換えられるようにするいくつかのシェルの機能です。

存在する:

alias foo='whatever'
foo xxx

シェルはこれを次のように拡張します。

whatever xxx

whateverそして別の解釈を経てこの場合コマンドが実行されます。

エイリアスは、コマンド位置(コマンド行の最初の単語)にある場合にのみ拡張されます。

zshサポートするグローバルニックネーム。

次のことができます。

alias -g rm='rm -i'

しかし、あなたは望んでいません。これはこれを意味するからです。

echo rm

rm -iたとえば、出力されます。

おすすめ記事