8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-12-15

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

ひとこと

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

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?