我正在运行以下bash脚本以在崩溃时重新启动我的Perforce服务器,但我想要做的就是让bash脚本运行Python脚本以发送带有应用程序退出代码的webhook到我的Slack频道。
Python脚本允许您执行类似python app.py 225
的操作,但它可以正常工作,但我想要做的是将$?
传递到该脚本中,例如python app.py $?
。
每当服务重新启动时,echo行都会正确报告退出代码(在终端中显示225),但是当传入Python脚本时$?
显示为0。
#!/bin/bash
until ~/Desktop/shell/p4d; do
echo "Perforce Server crashed with exit code $?. Respawning.." >&2
sleep 1
python ~/Desktop/shell/app.py $?
done
获取参数的Python脚本片段:
if __name__ == "__main__":
error = str(sys.argv[1])
print error
post_message(error)
我该怎么做?
答案 0 :(得分:2)
$?
的行为类似于变量。在每次调用程序(例如p4d,sleep,python)之后,该命令的返回值由bash存储在$?
中。
在您的情况下,当您“回显”它时,$?
包含p4d的返回值。然后你调用“sleep”,这实际上是一个程序“/ bin / sleep”,所以#!/bin/bash
until ~/Desktop/shell/p4d; do
P4D_RETURN=$?
echo "Perforce Server crashed with exit code $?. Respawning.." >&2
sleep 1
python ~/Desktop/shell/app.py $P4D_RETURN
done
的值被sleep的返回代码替换为0。
因此,python脚本也会被调用“0”。
要解决您的问题,您可以将返回代码缓存在本地变量中,如下所示:
if($("#coemp_pret1").val() == "1"){
$(this).val(function(index, value) {
var tempValue = $(this).val($(this).val() + $("#QuotDecAdh_s3p1").val());
if( tempValue < "100" ){
return value
.replace(/\d{1,2}(?!\d)|100/, "");
$(this).val(100 - $("#QuotDecAdh_s3p1").val());
}
});
}