我的 bash 脚本 ( init.sh) 调用另一个脚本 ( ),我想在 .bashrc 中执行任何进一步操作之前script.sh测试错误代码。
我想过用 来测试它,但它不起作用script.shinit.sh$?
我的init.sh像下面这样:
#!/bin/bash
set -e
echo "Before call"
docker run -v $PWD:/t -w /t [command]
if [ $? == 1 ]; then
echo "Issue"
fi
echo "After call"
Run Code Online (Sandbox Code Playgroud)
我只得到了Before callfromstdout而没有得到After call.
我知道一个事实,如果我docker run -v $PWD:/t -w /t [command]使用错误的参数单独执行,那么echo $?将正确显示 1。
我在想我不是从 捕获退出代码scrip.sh,而是从其他地方捕获退出代码。
有任何想法吗?
您使用 运行脚本set -e。这意味着如果任何命令以非零状态退出,bash 将停止执行所有后续行。所以在这里,如果docker以状态 1 退出,则后面的条件将根本没有机会运行。试试这个:
#!/bin/bash
set -e
echo "Before call"
if ! docker run -v $PWD:/t -w /t [command]; then
echo "Issue"
fi
echo "After call"
Run Code Online (Sandbox Code Playgroud)
这会在 if 测试中运行命令,从而抑制上述效果set -e,并让您有机会捕获错误。请注意,这还将捕获所有非零状态,而不仅仅是 1。