bash リダイレクションによる上書き禁止

何かコマンドからの出力を簡単にファイルに残しておけるので、リダイレクトは良く使います。しかし、たまに大事な既存ファイルに上書きしてしまって失敗することがあります。そんな「よくあるリダイレクトミス」を防ぎましょう!

リダイレクトで上書き禁止する場合は、setコマンドで「noclobber」をシェルの設定としてセットしておきます。以降、ファイルは’>’で上書きできなくななります。ただし、追記「>>」は可能です。上書きが必要な場合は「>|」で上書きできるようになります。設定を元に戻す場合は、同様に、setコマンドで「noclobber」をシェルの設定をoffにします。

リダイレクト禁止の設定

リダイレクトによる上書き禁止する場合は、setコマンドで「noclobber」を以下のようにセットします。

1: $ set -o noclobber

このとき、シェルの設定は「noclobber」がonになります。

1: $ set -o
2: ...
3: noclobber          on
4: ...

リダイレクト禁止の動作

この場合、既存ファイルにリダイレクトしようとすると、エラーが発生して上書きされません。

1: $ cat aaa.txt
2: aaa
3: 
4: $ echo "hello" > aaa.txt
5: bash: aaa.txt: 存在するファイルを上書きできません
6: 
7: $ cat aaa.txt
8: aaa

追記は有効です。

1: $ cat aaa.txt
2: aaa
3: 
4: $ echo "hello" >> aaa.txt
5: 
6: $ cat aaa.txt
7: aaa
8: hello

強制的に上書きする

リダイレクト禁止で「noclobber on」のとき、既存ファイルに強制的に上書きする場合は、「>|」を使います。

1: $ cat aaa.txt
2: aaa
3: 
4: $ echo "hello" >| aaa.txt
5: 
6: $ cat aaa.txt
7: hello

リダイレクト禁止の設定を元に戻す

リダイレクトによる上書き禁止を元に戻す場合は、setコマンドで「noclobber」を以下のようにセットします。

1: $ set +o noclobber

このとき、シェルの設定は「noclobber」がoffになって上書き可能になります。

1: $ set -o
2: ...
3: noclobber          off
4: ...

まとめ

  • リダイレクト禁止の設定は「set -o noclobber」、戻す場合は「set +o noclobber」
  • リダイレクト禁止がセットされても、追記「>>」は可能。
  • 強制的に上書きする場合は、「>|」を使う。



ピックアップ記事

  1. R plot 重ねる方法3パターン サンプルでわかるRの使い方

    Rでグラフ (plot) を重ねる方法は、「単純な追加」「図に重ねて描画」「濃淡で重なり表現」の3…
  2. awk split サンプルでわかる列の分割とセパレータ(文字・正規表現)の指定方法

    awkのsplit関数は、セパレータを指定して文字列を分割することができます。セパレータには文字や…
  3. awk if サンプルでわかる条件文の書き方 一致・大小比較・正規表現を簡潔に書く方法

    awkのif条件文は、条件によって処理をわけたいときに使います。条件式では、0の判定・関係演算子・…

人気記事

  1. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…
  2. Excel, その他, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…
  3. R データ型 - 文字列・ベクター・データフレーム・マトリックス など-, R言語, スクリプト

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…

おすすめ記事

  1. awk, bash 文字列操作, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…
  2. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…
  3. bash 応用, シェルスクリプト

    シェル スクリプト ファイル存在チェック・空のファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…