Bash除了
除了>>
之外,還有另一種簡單的方法可以將行附加到文件末尾嗎?
最近,我正在將短句回顯到
tree_hole
文件中。我
echo 'something' >> tree_hole
用來做這項工作。但我總是擔心如果我輸入錯誤
>
而不是>>
,因為我經常這樣做。所以我在 bashrc 中創建了一個自己的全域 bash 函式:
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$
如果您擔心您的文件會被
>
操作員損壞,您可以將文件屬性更改為僅附加:在ext2/ext3/ext4文件系統中:
chattr +a file.txt
在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 }