我想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 $?