没有错误时,Bash错误重定向创建文件

时间:2014-10-20 11:11:39

标签: linux bash

我正在尝试使用bash脚本并将错误重定向到文件来停止服务

service ssh stop 2> ssh.error

问题是即使没有错误也会创建错误文件

3 个答案:

答案 0 :(得分:2)

Shell重定向对您正在运行的命令一无所知(它可能存在,也可能不存在)。重命名(和文件创建)在运行命令之前发生

这就是您无法使用重定向读取和写入单个文件的原因。 (即printf 'contents\ncontents\n' > file; more file > file截断/清空file文件。

答案 1 :(得分:1)

如果文件为空,您可以使用此文件删除

 service ssh stop 2> ssh.error && [[ ! -s ssh.error ]] && rm ssh.error

答案 2 :(得分:1)

shell必须为命令提供准备写入的文件,这意味着它必须在启动命令之前打开文件(必要时创建它)。一种选择是使用一个单独的进程,该进程从命令的标准错误中读取,只有在得到一些输入时才写入文件。

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

这比简单地删除空文件效率低。