コマンドの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に通知する方法はありません。