最近、短い文をtree_hole
ファイルにエコーしています。
この仕事にはecho 'something' >> tree_hole
を使用していました。
しかし、私は>
ではなく>>
を誤って入力するとどうなるかを常に心配していました。
だから私はbashrcで自分のグローバルbash funcを作りました:
function th { echo "$1" >> /Users/zen1/zen/pythonstudy/tree_hole; }
export -f th
しかし、ファイルの最後に行を追加する別の簡単な方法があるかどうか疑問に思っています。他の機会に頻繁に使用する必要があるからです。
何かありますか?
シェルのnoclobber
オプションを設定します。
bash-3.2$ set -o noclobber
bash-3.2$ echo hello >foo
bash-3.2$ echo hello >foo
bash: foo: cannot overwrite existing file
bash-3.2$
心配な場合は、ファイルが>
演算子ファイル属性を追加のみに変更できます:
In ext2/ext3/ext4ファイルシステム:chattr +a file.txt
In [〜#〜] xfs [〜#〜]ファイルシステム:echo chattr +a | xfs_io file.txt
関数が必要な場合は、自分で関数を作成しました(出力をログに記録するためにサービスファイルで使用しました)。目的に応じて変更できます。
# This function redirect logs to file or terminal or both!
#@ USAGE: log option data
# To the file -f file
# To the terminal -t
function log(){
read -r data # Read data from pipe line
[[ -z ${indata} ]] && return 1 # Return 1 if data is null
# Log to /var/log/messages
logger -i -t SOFTWARE ${data}
# While loop for traveling on the arguments
while [[ ! -z "$*" ]]; do
case "$1" in
-t)
# Writting data to the terminal
printf "%s\n" "${data}"
;;
-f)
# Writting (appending) data to given log file address
fileadd=$2
printf "%s %s\n" "[$(date +"%D %T")] ${data}" >> ${fileadd}
;;
*)
;;
esac
shift # Shifting arguments
done
}
追加オプションで tee
を使用します。
foo | tee -a some-file
# or
tee -a some-file <<EOF
blah blah
EOF
# or
tee -a some-file <<<"blah blah"
上書きのためにファイルを開くことができる多くのプログラムは、たとえばgnu ddのように、ファイルを追加のために開くことができます。
dd conv=notrunc oflag=append of=file
stdinまたはif=
パラメータadd 2>/dev/null
で指定されたファイルを読み取って、バイト数を抑制することができます。