この関数は、私のユーザーの〜/ .bashrcの1つに存在します。
function rm()
{
ls $*
echo "rm?"
read ans
if [ "$ans" == 'y' ]; then
/bin/rm $*
fi
}
ユーザーが実行する必要がある私のkshスクリプトには、次のような行があります。
[[ "$KEEP" = "" ]] && \rm $FILE
バックスラッシュはユーザー定義のエイリアスをエスケープしますが、スクリプトが同じ名前のユーザー定義関数を実行するのを停止しません。その結果、システム関数の代わりにユーザーのrm()関数が呼び出されます。
this スーパーユーザーの質問の質問と応答が見つかりましたが、解決策は組み込み関数にのみ適用され、システムコマンドには適用されません。
エイリアスや関数ではなく、rmコマンドが呼び出されないようにするのに最適な方法は何ですか? rmへのフルパスを指定する必要があり、確認したいすべてのシステムコマンドが正しく実行されますか?もっと良い方法はありますか?
command
を使用して、通常のbash関数ルックアップを回避できます。
command rm
非破壊的な例:
$ alias which='which -s'
$ function which { echo "which $@?" ; }
$ which which
which -s which?
$ command which which
/usr/bin/which
または、env
を使用して呼び出します($PATH
で指定された名前の最初のプログラムを実行するか、フルパスを指定します。
/usr/bin/env rm
/bin/rm