小编use*_*487的帖子

如何结合 bash 命令分组和管道状态

如何结合 bash 命令分组和管道状态?

这是一个示例命令组:

{ tar -cf - my_folder 2>&1 1>&3 | grep -v "Removing leading" 1>&2; } 3>&1 | gzip --rsyncable > my_file.tar.gz
Run Code Online (Sandbox Code Playgroud)


这是一个示例管道状态读数,以配合上述内容:

[[ ${PIPESTATUS[*]} =~ [1-9] ]] && rm my_file.tar.gz
Run Code Online (Sandbox Code Playgroud)


在这个例子中,命令组使邮件假脱机没有关于“从 tar 中删除前导 /”的警告,通过 cron 传送,因为它们落在 stderr(Unices 缺少 stdwarn 并且 tar 缺少安静选项),同时让真正的错误通过.

管道状态读出确保立即删除损坏的备份文件,以防止使用标准 FIFO 算法在以后清除旧的有效文件。

但是这个例子不起作用。上面的管道状态包含[1 0],即grep和gzip的退出码,但不包含tar。

我尝试过的一种尝试是:

{ tar -cf - my_folder 2>&1 1>&3 | grep -v "Removing leading" 1>&2; GROUPSTATUS=${PIPESTATUS[*]}; } 3>&1 | gzip --rsyncable > my_file.tar.gz
[[ $GROUPSTATUS =~ [1-9] ]] && rm my_file.tar.gz …
Run Code Online (Sandbox Code Playgroud)

bash

6
推荐指数
2
解决办法
8553
查看次数

标签 统计

bash ×1