我正在尝试使用bash脚本并将错误重定向到文件来停止服务
service ssh stop 2> ssh.error
问题是即使没有错误也会创建错误文件
答案 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
这比简单地删除空文件效率低。