コマンドの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、この場合、削除する前にユーザーにプロンプトが表示されないのはなぜですか?
strace、エイリアス、あなたがしなければならないstraceエイリアスを実装し、シェル、。それを行うために取ることができるいくつかのアプローチがあります:strace -p $$ &or strace bashまたはstrace sh -c 'rm ramesh'(最後のものもエイリアスを無視しますが、まったく異なる理由で)
straceエイリアスを無視しません。そもそも、無視するものがあったことを意味するからです。エイリアスはシェルの機能です。strace別のプログラムでありstrace、エイリアスの概念の内部には存在しないため、無視することは何もありません。カーネルがプログラムを実行するために提供するAPIにもエイリアスの概念がないため、シェルがエイリアスについてstraceに通知する方法はありません。