8
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Bashでリダイレクトにより誤って既存ファイルを上書きしてしまわないようにする

Bashでリダイレクトにより誤って既存ファイルを上書きしてしまわないようにする

背景

bashクックブック を読み進めています。

標準で ON にしておくと良さそうな設定がありました。
Bashでリダイレクトにより誤って既存ファイルを上書きしてしまわないようにする設定です。

環境

$ uname -a
Darwin genzouw-MacBook-Pro.local 15.2.0 Darwin Kernel Version 15.2.0: Fri Nov 13 19:56:56 PST 2015; root:xnu-3248.20.55~2/RELEASE_X86_64 x86_64 i386 MacBookPro10,1 Darwin


$ bash -version
GNU bash, バージョン 4.3.42(1)-release (x86_64-apple-darwin14.5.0)
    Copyright (C) 2013 Free Software Foundation, Inc.
    ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

    This is free software; you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.

"set -o noclobber"

"set -o noclobber" を実行すると、すでに存在しているファイルをリダイレクトにより上書きできなくなります。
ファイルが存在しない場合は問題なく新規作成されます。
追記も問題なくできます。

$ set -o noclobber

# 新規はできる
$ echo 123 > x.txt

$ ls
x.txt

# 上書きはできない
$ echo 456 > x.txt
bash: x.txt: 存在するファイルを上書きできません

# 追記はできる
$ echo 456 >> x.txt

# >| を使えば上書き可能
$ echo abc >| x.txt

# -o ではなく +o で設定をOFFにできる
$ set +o noclobber

# OFFにしていれば、上書き可能
$ echo 789 > x.txt

ひとこと

明示的な上書きは >| を使うという書き方でルール化するのは有りだなと思いました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
8
Help us understand the problem. What are the problem?