bash : cat 命令仅在成功时输出

bash : cat commands output only if it success

我试图仅在命令成功时才将命令的输出重定向到文件中,因为我不希望它在失败时删除其内容。 (command 正在读取文件作为输入)

我目前正在使用

cat <<< $( <command> ) > file;

如果失败则删除文件。

可以通过将输出存储在临时文件中来做我想做的事情:

<command> > temp_file && cat temp_file > file

但我觉得有点乱,我想避免手动创建临时文件(我知道 <<< 重定向正在创建一个临时文件)

我终于想出了这个绝招

cat <<< $( <command> || cat file) > file;

这不会改变文件的内容...但我想这会更乱。

请记住,> 运算符用命令的输出替换文件的现有内容。如果你想将多个命令的输出保存到一个文件中,你应该使用 >> 运算符。这会将输出附加到文件末尾。

例如,以下命令会将输出信息附加到您指定的文件中:

ls -l >> /path/to/file

因此,为了仅在成功时记录命令输出,您可以尝试这样的操作:

until command
do
  command >> /path/to/file
done

也许将输出捕获到一个变量中,如果退出状态为零,则将该变量回显到文件中:

output=$(command) && echo "$output" > file

测试

$ out=$(bash -c 'echo good output') && echo "$out" > file
$ cat file
good output

$ out=$(bash -c 'echo bad output; exit 1') && echo "$out" > file
$ cat file
good output