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
我试图仅在命令成功时才将命令的输出重定向到文件中,因为我不希望它在失败时删除其内容。
(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