web-dev-qa-db-ja.com

「>>」以外にファイルの最後に行を追加する簡単な方法はありますか?

最近、短い文をtree_holeファイルにエコーしています。

この仕事にはecho 'something' >> tree_holeを使用していました。

しかし、私は>ではなく>>を誤って入力するとどうなるかを常に心配していました。

だから私はbashrcで自分のグローバルbash funcを作りました:

function th { echo "$1" >> /Users/zen1/zen/pythonstudy/tree_hole; }
export -f th

しかし、ファイルの最後に行を追加する別の簡単な方法があるかどうか疑問に思っています。他の機会に頻繁に使用する必要があるからです。

何かありますか?

22
Zen

シェルの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$ 
47
Celada

心配な場合は、ファイルが>演算子ファイル属性を追加のみに変更できます:
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
}
7
Sepahrad Salour

追加オプションで tee を使用します。

foo | tee -a some-file
# or
tee -a some-file <<EOF
blah blah
EOF
# or 
tee -a some-file <<<"blah blah"
3
muru

上書きのためにファイルを開くことができる多くのプログラムは、たとえばgnu ddのように、ファイルを追加のために開くことができます。

dd conv=notrunc oflag=append of=file

stdinまたはif=パラメータadd 2>/dev/nullで指定されたファイルを読み取って、バイト数を抑制することができます。

0
Jasen