Bash 如果替换其命令字符串的命令失败,则强制sh失败

Bash 如果替换其命令字符串的命令失败,则强制sh失败,bash,curl,sh,Bash,Curl,Sh,我想从URL执行bash脚本。 我使用sh-c“$(curl-f${SCRIPT\uurl})” 它工作正常,但如果url不正确或子脚本出现错误,则父脚本将成功完成 例如: set -e sh -c "$(curl -f ${SCRIPT_URL})" echo "success" 我可以通过使用附加变量得到一个需要的错误: set -e url=$(curl -f ${SCRIPT_URL}) sh -c "$url" echo "success" 但我不想使用额外的变量。是否可以

我想从URL执行bash脚本。
我使用
sh-c“$(curl-f${SCRIPT\uurl})”

它工作正常,但如果url不正确或子脚本出现错误,则父脚本将成功完成

例如:

set -e
sh -c "$(curl -f ${SCRIPT_URL})"
echo "success"
我可以通过使用附加变量得到一个需要的错误:

set -e
url=$(curl -f ${SCRIPT_URL})    
sh -c "$url"
echo "success"

但我不想使用额外的变量。是否可以在没有附加变量的情况下执行此操作?

如果curl失败,则写入
退出1
,这样sh将以1的状态退出,并且
设置-e
将生效

set -e
sh -c "$(curl -f "${SCRIPT_URL}" || echo exit 1)"
echo success

使用变量或中间文件,在不依赖
set-e
的情况下处理错误确实是一种更好的方法。

如果脚本失败,第一种方法应该按照您希望的方式工作。第二个在第三行出现错误。它的使用方式看起来应该是
sh-c“$url”
。看起来如果curl失败,它可能会返回一个良好的返回代码。请参阅答案。理想情况下,在运行
sh
之前,您将失败。在执行
sh
之前,最好验证
curl
的完整输出是否是您期望的脚本。将脚本保存到一个文件中,验证它,然后运行
sh theScript.sh
。回答不错。通常我会尽量避免
set-e
。对于类似的内容,我更愿意使用
if sh-c…
检查返回代码,或者只使用一行代码
sh-c“$(curl-f“${SCRIPT_URL}”| | echo exit 1)”&&echo success