stdout / stderr出力をタイムスタンプされたログファイルにリダイレクトする

stdout / stderr出力をタイムスタンプされたログファイルにリダイレクトする

stdoutとstderrをログファイルにリダイレクトしようとしています。ファイル名は現在のタイムスタンプを使用して動的に生成する必要があります。

以下を使用してファイル名を作成できます。

$ date +%Y-%m-%d_%H-%M-%S.txt
2018-04-10_16-55-55.txt

だから私は次のような作業をしたいと思います。

mycommand &> (date +%Y-%m-%d_%H-%M-%S.txt)

しかし、これはうまくいきません(-bash: syntax error near unexpected token `('

答え1

はい、コマンド置換を使用する必要があります。

mycommand &> "$(date +%Y-%m-%d_%H-%M-%S.txt)"

これはbash言う

mycommand  >"$(date +%Y-%m-%d_%H-%M-%S.txt)" 2>&1

どちらが同じですか?

mycommand  >"$(date +%F_%H-%M-%S.txt)" 2>&1

%F同じです%Y-%m-%d

コマンド置換は$(...)内部コマンドの出力に置き換えられます。

サブシェルを使用して(...)おり、.subshel​​lはこれらのリダイレクトを許可できません。

答え2

この試み:

today=`date +%Y-%m-%d_%H-%M-%S`; mycommand > ${today}.txt 2>&1

関連情報