从bash脚本中的curl获取退出代码

从bash脚本中的curl获取退出代码

我想simple.sh从互联网上获取脚本的输出并检查其退出代码。我在 OSX 上

#!/bin/bash
$(curl -s http://127.0.0.1:8000/simple.sh)
if [ -z "$?" ]; then
    echo "Good"
    exit 0
else
    echo "Bad"
    exit 1
fi

简单.sh:

#!/bin/bash
exit 0

我遇到的问题是:

./test.sh: line 2: #!/bin/bash: No such file or directory
Bad

答案1

您的想法是正确的,但您似乎定义了一个错误的条件来检查返回代码,用于[ -z "$?" ]检查返回代码字符串是否为空的或不。无论输出结果如何curl,您的$?意志都会携带一个值,这意味着您永远不会断言if脚本的条件。您可能需要检查curl直接在脚本中返回的返回代码

$(curl -s http://127.0.0.1:8000/simple.sh)
if [ "$?" -eq 0 ]; then

或者更简洁地编写,不使用运算符,以允许在条件test中直接使用返回码if

if curl -s http://127.0.0.1:8000/simple.sh 2>&1 >/dev/null; then

答案2

不能说它很优雅,但这就是我会这样做的方式:

#!/bin/bash
curl -s http://127.0.0.1:8000/simple.sh | /bin/bash -s >/dev/null 2>&1
rc=$?
if [ -z "$rc" ]
then
    echo "Good"
    exit 0
else
    echo "Bad"
    exit 1
fi


在我看来,你这样做的方式类似于在$( ... )构造。从来没有尝试过,不确定 bash 是这样工作的。

让curl 回显文件的内容并将其通过管道传输到bash 可以解释curl 命令的文本输出并允许bash 执行它。

我敢打赌,如果你尝试这样做,你会得到相同的结果:

$( cat /[path]/simple.sh ); echo $?

相关内容