如何检查管道中命令的退出状态?

例子:

mysqldump -u $db_username -p $db_name | gzip -c > output.sql.gz

只需使用以下命令检查上述内容的退出状态:

echo $?

但是退出状态将始终为“0”,因为这是最后一个命令的退出状态,即“gzip -c > output.sql.gz”。

为了检查“管道命令”中特定命令的退出状态,请检查 bash 特殊数组“PIPESTATUS”。
这就是 bash 存储来自管道的最近命令的退出状态的地方。

例如 :

  • ${PIPESTATUS[0]} 指的是“管道命令”中的第一个命令
  • ${PIPESTATUS[1]} 指的是“管道命令”中的第二条命令
  • ${PIPESTATUS[2]} 指的是“管道命令”中的第三条命令
Bash - 如何检查管道命令的退出状态

bash 命令中的管道很常见。

在 bash 脚本中检查命令的退出状态是必不可少的。

示例

以下是如何在管道命令中检查程序退出代码的示例:

#!/usr/local/bin/bash
db_username="myusername"
db_name="mydatabase"
mysqldump -u $db_username -p $db_name | gzip -c > ./output.sql.gz;
if [ ${PIPESTATUS[0]} -ne "0" ];
then
    echo "the command \"mysqldump\" failed with Error: ${PIPESTATUS[0]}";
    exit 1;
else
    echo "Database dump successfully!";
fi
日期:2020-06-02 22:16:47 来源:oir作者:oir