Unix でコマンド実行前に確認をするだけの簡単なシェルスクリプトを公開します。 mv コマンドと間違えて rm コマンドを実行するミスを防ぐなどの役に立ちます。
今から 5 年ほど前。僕は Unix を使っていて、 important.txt のファイル名を precious.txt に変えようと思いました。当然、 mv important.txt precious.txt と入力すれば済むはずなのですが、なぜかエラーメッセージが表示されます。
~> rm important.txt precious.txt precious.txt: No such file or directory
あれ? precious.txt が存在しないって、変更後のファイル名だから、存在しないに決まっているじゃないですか。と思ってコマンドラインを見直して―よよよよよ (泣き声)。
その後もまったく同じ、 mv コマンドと間違えて rm コマンドを実行するというミスを 3 回くらい経験して懲りたので、 rm を他のコマンドと間違えて実行するというミスを防ぐための「確認付き rm シェルスクリプト」を書きました。
しばらくの間使っていて、それで救われたこともあったのですが、その後ようやくこの間違いをしなくなったので、計算機環境の移行などに伴い、昔書いたスクリプトは使わなくなりました。
先日「削除したファイルを lsof で復元する」 (Open Tech Press; Michael Stutz さん) を読んで驚いたことがありました。
「ええと、 mv だっけ、 rm じゃないのか?」…やっちまった。そのショックはよくわかる。誰にでもありうる失敗だ。
mv を実行するつもりで間違えて rm を実行するなんてミスをするのは僕だけかと思っていました。
というわけで、もう僕自身は使っていませんが、誰かの役に立てばと思い、当時のスクリプトを少し書き直した「コマンド確認実行シェルスクリプト」を公開します。
下のシェルスクリプトを confirm 等適当な名前で保存し、実行属性を付けます。お使いのシェルの設定で rm を confirm rm のエイリアスにします。これで準備完了です。
こうしておくと、次から rm を使ったときに一度確認が入るようになります。
~> rm unneeded1.txt unneeded2.txt confirm: rm: Are you sure? [y]:
ここで Enter キーを押せば本当に rm コマンドが実行されます。つまり、ファイルを削除するときにはコマンドラインを入力した後 Enter キーを 2 回押すことになります。画面に表示される確認メッセージをいちいち読む必要もありません。慣れてしまえば大した手間ではありません。
一方、 mv のつもりで rm と打ち間違えた場合は、 mv コマンドなら入らないはずの確認が入ることで間違いに気付きます。
~> rm important.txt precious.txt confirm: rm: Are you sure? [y]:
ここで Ctrl-c なり n なりを入力すれば rm コマンドは実行されません。
rm の -i オプションを使うのと違い、複数ファイルを削除する場合でもファイル一つずつに対しては確認されないので、複数ファイルをいちいち確認なしに削除したいときにもそのまま使えます。
ただし、普段使っている環境でこの設定をして、 mv と rm を間違える癖を直すのを怠ると、別の環境で間違えて泣きを見ることになりますので、 mv と rm を間違えるのを本当に防ぐには、自分で気を付けるしかありません。このスクリプトは打ち間違いを防ぐのではなく、あくまでも打ち間違えてしまったときの被害を軽減するだけの機能しかないことに注意してください。
このスクリプトに関していかなる保証もしません。また、このスクリプトの著作権を放棄しますので、使用・改造・再配布等ご自由にどうぞ。
スクリプトをダウンロードする (confirm.sh.txt)。
環境によっては、
echo -n "${progname}: $1: Are you sure? [y]: "
と書かれている行を
echo "${progname}: $1: Are you sure? [y]: \c"
に書き換える必要があるかもしれません。
2006 年 11 月 25 日公開、 2006 年 11 月 28 日文章を手直し。著者: fcp / このサイトについて