小编Ter*_*ryA的帖子

仅在成功的命令调用时重定向输出

我想将命令的输出(diff在这种情况下)重定向到一个文件,但前提是我比较的文件存在差异。例如,假设我有三个文件ab、 和cwhereab是等价的但ac不是。

如果我做diff a c > output.txtor diff a b > output.txt,不管有没有区别,output.txt都会被创造出来。我只想output.txt在有差异时被创建(即差异返回 1)。

我想做类似的事情:

if ! diff a c > /dev/null; then
    diff a c > output.txt
fi
Run Code Online (Sandbox Code Playgroud)

但是没有运行命令两次。我可以像这样保存命​​令的内容:

res=$(diff a c)
if [ $? != 0 ]; then
    echo "$res" > output.txt
fi
Run Code Online (Sandbox Code Playgroud)

但后来我echo以“中间人”的身份参与进来,这可能会引发一些问题。仅当有输出而不复制代码时,如何重定向输出/创建文件?

shell io-redirection shell-script posix

6
推荐指数
3
解决办法
582
查看次数

标签 统计

io-redirection ×1

posix ×1

shell ×1

shell-script ×1