仅当程序成功时如何重定向程序的输出?

Jon*_*ny5 6 unix bash shell

当我的程序之一返回非零退出代码时,我想避免重定向其输出。这是可能的,如果是,我该怎么做?

我失败的尝试:

echo foo > file
false | cat > file
Run Code Online (Sandbox Code Playgroud)

这导致file为空。我想要的行为是仅file在程序成功时进行调整。

我还想知道是否可以只在输出非空的情况下更新文件而不使用多个文件。

anu*_*ava 7

你可以这样使用它:

out=$(some_command) && echo "$out" > outfile
Run Code Online (Sandbox Code Playgroud)

echo "$out" > outfile只有在some_command成功时才会执行。

  • 注意:如果 some_command 的输出很大,你可能需要 `t=$(mktemp); some_command >$t && cat $t > outfile; rm -f $t` (2认同)
  • 只是为了稍微确定一下问题的范围,shell 重定向和管道甚至在您的命令运行之前就发生了。这就是您最初的尝试行不通的原因;你的输出文件在你的程序运行之前就消失了。 (2认同)
  • 我一直对 shell 脚本的设计如此糟糕感到惊讶 (2认同)