![](/img/trans.png)
[英]Order of events in Bash shell redirection of standard output and error to the same file
[英]Bash error redirection creating file when there is no error
我正在尝试使用bash脚本停止服务并将错误重定向到文件
service ssh stop 2> ssh.error
问题是即使没有错误,也会创建错误文件
Shell重定向对您正在运行的命令一无所知(它可能存在也可能不存在)。 重定向(和文件创建) 在运行命令之前发生。
这就是为什么您无法使用重定向读取和写入单个文件的原因。 (即printf 'contents\\ncontents\\n' > file; more file > file
截断/清空file
文件)。
如果文件为空,可以使用它来删除文件
service ssh stop 2> ssh.error && [[ ! -s ssh.error ]] && rm ssh.error
外壳程序必须为命令提供准备好写入的文件,这意味着它必须在启动命令之前打开文件(如有必要,请创建文件)。 一种选择是使用一个单独的过程,该过程从命令的标准错误中读取并且仅在文件获得某些输入时才写入文件。
mkfifo err
while read -r line; do
echo "$line" >> ssh.error
done < err & log_pid=$!
service ssh stop 2> err
kill "$log_pid"
rm err
这比简单地删除空文件的效率低。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.