我正在尝试将 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