如何从bash脚本中将stdout和stderr复制到带有时间戳的文件中?

如何从bash脚本中将stdout和stderr复制到带有时间戳的文件中?,bash,Bash,我使用了这个,它只将标准输出复制到文件: $ cat /etc/dehydrated/syncNexusCertificatesHook.sh #!/bin/bash -ex exec &> >(ts '[%Y-%m-%d %H:%M:%S]' | tee -a /var/log/dehydrated.log >&2 ) ... 运行脚本时,出现了一个perl:warning:settinglocale失败。打印到终端,但没有打印到日志文件 我希望将脚本的

我使用了这个,它只将标准输出复制到文件:

$ cat /etc/dehydrated/syncNexusCertificatesHook.sh 
#!/bin/bash -ex

exec &> >(ts '[%Y-%m-%d %H:%M:%S]' | tee -a /var/log/dehydrated.log >&2 )
...
运行脚本时,出现了一个
perl:warning:settinglocale失败。
打印到终端,但没有打印到日志文件


我希望将脚本的所有输出打印到控制台,并将时间戳打印到日志文件中。如何实现这一点?

要将命令的stdout和stderr重定向到一系列命令,并最终重定向到控制台和文件,可以使用以下语法

命令|&ts'[%Y-%m-%d%H:%m:%S]'| tee文件
哪个是这个的同义词

命令2>&1 | ts'[%Y-%m-%d%H:%m:%S]'| tee文件
或者将两个流重定向到进程替换

命令&>>(ts'[%Y-%m-%d%H:%m:%S]'| tee文件)
或者重定向输出,然后使stderr成为stdout的副本

command>>(ts'[%Y-%m-%d%H:%m:%S]'| tee文件)2>&1

您可以将
ts
stderr重定向到日志文件,以使用
2>&1
而不是
&>
,如果您想在日志文件中同时使用这两个属性,您想在控制台中使用任何内容吗?@thanasisp在日志文件和console@Digvijay最后我是否也需要替换>&2?