将 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-speak for

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

哪个是相同的

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

%F是相同的%Y-%m-%d

命令替换 ,$(...)将被内部命令的输出替换。

您使用的是一个子外壳,(...).子 shell 无法接受这样的重定向。

答案2

尝试这个:

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

相关内容