如何检查管道中命令的退出状态?
例子:
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 脚本中检查命令的退出状态是必不可少的。
示例
以下是如何在管道命令中检查程序退出代码的示例:
#!/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