私はいつもこれらのファイルにテキストを追加します。
echo "text text text ..." >> file
# or
printf "%s\n" "text text text ..." >> file
同じ、よりエレガントな、またはより珍しい方法を達成するためのより多くの方法があるかどうか疑問に思います。
答え1
私はこれが本当に好きです。スクリプトの上部にログファイルを設定し、グローバル変数を必要とせず、ファイル名のすべてのエントリを変更することを覚えておらず、プロセス全体でログファイルに書き込むことができます。
exec 3>> /tmp/somefile.log
...
echo "This is a log message" >&3
echo "This goes to stdout"
echo "This is written to stderr" >&2
この構成は、書き込み用(追加用、読み取り用 - 一般と同様)のためにexec 3>dest
ファイルを開き、ファイル記述子#3に追加します。次に記述子#1を取得します。dest
>>
<
標準出力、#2は標準エラーそして、この記事の新しい#3ですdest
。
あなたは参加できます標準エラー到着標準出力- などの構文を使用して、exec 2>&1
スクリプト期間内に強力な可能性がたくさんあります。文書(man bash
)には、これについて次のような内容が記載されています。
exec [-cl] [-a name] [command [arguments]]
指定した場合はcommand
シェルを置き換えます。 [...]指定しないと、command
すべてのリダイレクトが現在のシェル[...]に適用されます。
答え2
ファイルにテキストを追加するいくつかの方法は次のとおりです。
Tシャツを使う
tee -a file <<< "text text text ..."
awkを使う
awk 'BEGIN{ printf "text text text ..." >> "file" }'
sedを使う
sed -i '$a text text text ...' file sed -i -e "\$atext text text ..." file
源泉:
答え3
使うhere-document
方法:
cat <<EOF >> file
> foo
> bar
> baz
> EOF
テスト:
$ cat file
aaaa
bbbb
$ cat <<EOF >> file
> foo
> bar
> baz
> EOF
$ cat file
aaaa
bbbb
foo
bar
baz
答え4
Unixファイルエディタを使用してください。GNU
とBSD
バージョンの両方。
ed(1)
そして使用printf
printf '%s\n' '$a' 'foo bar baz' . w | ed -s file.txt
bashに特化していますが、もっと難解な構文、$' '
シェル引用、herestring
ed -s file.txt <<< $'$a\nfoo bar baz\n.\nw'
ex(1)
そして使用printf
printf '%s\n' '$a' 'foo bar baz' . x | ex -s file.txt
$' '
bashに特化していますが、シェル引用のためのもう少し難解な構文とherestring
ex -s file.txt <<< $'$a\nfoo bar baz\n.\nx'