script.sh:
#!/bin/bash
my-bin-file-i-run
if [ $? -eq 0 ]
then
exit 0
else
if [[ >&2 == *"name_to_handle_at"* ]]; then
exit 0
fi
echo >&2
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
我想运行我的命令,如果它抛出一个错误,其中消息包含“name_to_handle_at”,它将像脚本没有错误一样处理它,所有其他错误都应该像往常一样显示。无法真正让它发挥作用。
您的语法有问题,因为您不能仅将某些先前执行的命令的标准错误与==此类进行比较。
一个建议是将错误流保存到一个文件中,然后解析它:
#!/bin/bash
if ! my-bin-file-i-run 2>error.log; then
if ! grep -q -F 'name_to_handle_at' error.log; then
echo 'some error message' >&2
exit 1
fi
fi
Run Code Online (Sandbox Code Playgroud)
这将运行命令并将标准错误流重定向到名为error.log. 如果命令因错误而终止,grep则用于name_to_handle_at在日志文件中查找字符串。如果找不到,则会打印一条错误消息,并且脚本以非零退出状态终止。
在任何其他情况下,脚本以零退出状态终止。
如果您希望在error.log脚本终止时删除该文件,您可以rm error.log在适当的位置或使用EXIT陷阱明确地这样做:
#!/bin/bash
trap 'rm -f error.log' EXIT
if ! my-bin-file-i-run 2>error.log; then
if ! grep -q -F 'name_to_handle_at' error.log; then
echo 'some error message' >&2
exit 1
fi
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2246 次 |
| 最近记录: |