rmコマンドのalias回避
運用シェルスクリプトでrmコマンドは、
よく使うと思います。
ですが、linux標準では、
[.bashrc]に
alias rm='rm -i' .
と設定されているため
運用シェルスクリプトでは
rm -f <filename>
と強制削除をやりたくなるところですが
rm -f (強制削除) の終了ステータスは常に「0」となるため、判定には使えない…
なら、どうするか?
その1: unalias rm する。
その2: コマンドをフルパス (/bin/rm)で書く。
その3: ¥rm aaa.txt コマンド先頭にバックスラッシュもしくはエンマークでaliasをエスケープする。
これなら、簡単に回避出来ますね。
ところが、どっこい…w
find <dir> -exec rm {} ¥;
もちろん、上記対策をしても
aliasが効いてしまいます。
なぜなら、execオプションは
別プロセスで実行されるため
再度、[.bashrc]が読み込まれからだ。
だったら、
find <dir> | xargs rm
なら大丈夫じゃないかと推測して
試してみると案の定、大丈夫。
めでたし、めでたし…(σ≧▽≦)σ
ちなみに
evalでは、
eval ¥rm
eliasは無視されない。
だが、
eval /bin/rm
だと、aliasは無視される
う~ん!どっちなんじゃ…