从调用python脚本的bash脚本返回

从调用python脚本的bash脚本返回,python,bash,Python,Bash,我有一个bash脚本(Controller.sh),它调用python脚本(MyDaemon.py)。后者接受一个参数和一个命令,可以从命令行调用,如下所示: /usr/bin/python /opt/stuff/MyDaemon.py -p Blue start 或 或 我正在尝试获取Controller.sh以调用MyDaemon.py,然后以状态退出。python脚本应该被启动,并且Controller.sh应该返回。这是我的控制器。sh代码: COLOR=$1 COMMAND=$2

我有一个bash脚本(
Controller.sh
),它调用python脚本(
MyDaemon.py
)。后者接受一个参数和一个命令,可以从命令行调用,如下所示:

/usr/bin/python /opt/stuff/MyDaemon.py -p Blue start

我正在尝试获取
Controller.sh
以调用
MyDaemon.py
,然后以状态退出。python脚本应该被启动,并且
Controller.sh
应该返回。这是我的
控制器。sh
代码:

COLOR=$1
COMMAND=$2

DIRNAME=`dirname $0`
RESULT="/tmp/$COLOR.$COMMAND.result"

# remove any old console output
rm -f $RESULT 2>/dev/null

#start with CPU affinity for anything other than CPU 0.
sudo taskset -c 1-8 /usr/bin/python /opt/stuff/MyDaemon.py -p $COLOR $COMMMAND</dev/null >$RESULT 2>&1

STATUS=$?

# print output
cat $RESULT

# check on success
if [ $STATUS -ne 0 ]
then
        echo "ERROR: $COLOR $COMMAND failed"
        exit 1
fi
我不得不得出结论,bash脚本中有某种东西阻止它返回

应该注意的是,
MyDaemon.py
不执行fork进程,这就是我需要重定向输出的原因。还应该注意的是,我从另一个与php脚本类似的脚本中提取了大部分内容;我对某些含义不太清楚(例如
STATUS=$?
)。也就是说,即使我删除了
sudo任务集
调用行之后的所有内容,它仍然无法干净地返回。如何让bash脚本正确执行此命令

后记:我有点困惑,这个问题怎么“太具体”了,怎么被否决了/被否决了。试图做到一清二楚;我试图理解分叉过程脚本在命令行上下文中的运行方式与bash脚本的不同。我在上面提供了一个具体的例子,但这是一个一般的概念

更新: 这是在我使用
bash-x
运行脚本时得到的结果,进一步显示它在
sudo任务集
行中死亡。
start
命令没有使用它,这一事实令人困惑

[nford@myserver]# bash -x Controller.sh Blue start
+ COLOR=Blue
+ COMMAND=start
++ dirname Controller.sh
+ DIRNAME=.
+ RESULT=/tmp/Blue.start.result
+ rm -f /tmp/Blue.start.result
+ sudo taskset -c 1-8 /usr/bin/python /opt/stuff/MyDaemon.py -p Blue
更新:
bash-x
揭示了问题:没有传递
start
命令:变量名中的输入错误会产生无声bash错误。外卖:使用
bash-x
进行调试

由于你的打字错误,你应该在你的脚本顶部使用
set-u
,它是一个救命稻草,可以阻止不眠之夜,也可以避免头发拉扯

set-u
会给你

myscript.sh: line 11: COMMMAND: unbound variable

请记住,您可以运行脚本,例如so
bash-u myscript.sh arg1 arg2
,同样,使用
-x
,它们都有助于跟踪脚本问题。

我不这么认为<代码>猫我相信会将
$RESULT
读入
$STATUS
。然后检查
$STATUS
是否为空。不管怎样,问题就在这一点之前。我把它放在这里是为了说明我在做什么。我相信每个脚本都有一个返回状态,除非它仍然在运行。您是否无法获取任何返回状态?bash脚本似乎继续运行,即使底层脚本应将控制权传递回。因此没有返回状态。您确定基础脚本返回了吗?您已经尝试过像
bash-x Controller.sh xx zz
那样运行您的脚本。同样,在您的示例中,在命令行上运行
sudo任务集…
后,您没有
echo$?
;脚本末尾的一条消息说
echo DONE
也可能对您有所帮助。
[nford@myserver]# sudo taskset -c 1-8 /usr/bin/python /opt/stuff/MyDaemon.py -p blue start</dev/null >/tmp/blah.log 2>&1
Started with pid 1326
[nford@myserver]#
[nford@myserver]# bash -x Controller.sh Blue start
+ COLOR=Blue
+ COMMAND=start
++ dirname Controller.sh
+ DIRNAME=.
+ RESULT=/tmp/Blue.start.result
+ rm -f /tmp/Blue.start.result
+ sudo taskset -c 1-8 /usr/bin/python /opt/stuff/MyDaemon.py -p Blue
myscript.sh: line 11: COMMMAND: unbound variable