ラズベリーパイのリダイレクト操作で誤ってファイルを消さないための設定

スポンサーリンク

ラズベリーパイをコマンドラインで操作することに慣れてくると、うっかり大切なファイルを上書きしたり削除したりしてしまうことが起こるようになるものです。

Linuxのコマンドには、それを防止するオプションがありますが、ファイルへのリダイレクトに対しては効果がないので、別の設定をしておく必要があります。

大切なファイルを消してしまう前に、しっかり設定しておきましょう。

スポンサーリンク

リダイレクトの失敗とは

今ここに、important.txtというファイルがあるとしましょう。

そして、このファイルには大切な情報が書かれているとします。

rmやcp, mvといったコマンドで、大切なファイルを誤って消してしまわないために、以下の記事でオプション設定を行うべきということを書きました。

スポンサーリンク
長いコマンド名を短くしてみたり、いつも使うコマンドとオプションとを合わせたもののエイリアスを登録しておくと、コマンドラインで実行するときの手間がずいぶん省けます。

いずれも、”-i”オプションを付けることで、既存のファイルに対する操作を本当に実行してよいかどうか問い合わせるようにするのでした。

しかし、これらのオプション設定は、リダイレクトには効果がありません。

リダイレクトとは、

  • コマンド > ファイル名

という書き方で、コマンドを実行した結果を、ファイル名で指定したファイルに書き込むことでした。

例えば

といった操作です。echoコマンドの出力”aaa”が important.txt に書き込まれるのでした。

この操作で、もしファイル名に上記の大切なファイル名を書いてしまうと、大切なファイルに対して誤ってリダイレクトしてしまうことになり、もとのファイルの内容は消えてしまいます。

気をつけていれば防げそうですが、コマンドをたくさん操作するようにやると、このような上書きはよくやってしまいがちです。

やはりここは、”-i”オプションのように、あらかじめ防止する設定をしておきたいものです。

bashでは set -o noclobber を設定して誤操作を防ごう

リダイレクトに対しては、この設定を事前にやっておけばOKです。

ただし、Bashを使用しているという前提です。

Raspbian をインストールしたあと、特にログインシェルを変更していなければ、Bashを使用しているはずです。

ファイル ~/.bashrc をエディタで開き、以下の設定を書いておきます。

.bashrcの中であれば、どの場所でも構いません。

書いたら、保存して終了し、

を実行しておきます。

これで、先ほとど同じことをやってみましょう。

今度は上記のようにエラーがでて、リダイレクトできないようになります。

上書きを許可するには

このnoclobber設定をした環境下で、一時的に上書きを許可したいこともあります。

この場合は、リダイレクトで使用する”>”の代わりに”>|”を使用します。

これは元の通り、エラーが出力されなくなります。

縦棒は、パイプ処理を行うときに使う”|”です。

追加上書き”>>”に対しては、”>>|”でOKです。

“set +o noclobber”とやって、リダイレクトの上書き禁止の設定を解除することもできますが、ここでは省略します。

早速設定しておきましょう。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする