Bash

除了>>之外,還有另一種簡單的方法可以將行附加到文件末尾嗎?

  • November 3, 2016

最近,我正在將短句回顯到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
}

引用自:https://unix.stackexchange.com/questions/178677