[英]Redirecting output in shell script from subprocess with simulated ctrl-c
我正在开发一个shell脚本,它在其中设置一些参数并调用python脚本。 有时python脚本挂起,当我按ctrl-c时,它会生成一些错误输出。 我正在尝试将此写入文件。 当我执行shell脚本并按ctrl-c时,会在重定向文件中获得输出,但是如果我尝试通过休眠一段时间并终止进程来模拟ctrl-c,则输出不会重定向至文件。 我已经从SO中使用了一些示例来进行睡眠并终止工作,但是输出文件没有我从ctrl-c操作手动获得的错误。
我无法更改此脚本正在执行的python脚本,因此我必须在调用脚本中实现它。
[ -z "$1" ] && echo "No environment argument supplied" && exit 1
. env_params.txt
. run_params.txt
echo "========================================================== RUN STARTED AT $B ==========================================================" >> $OUTFILE
echo " " >> $OUTFILE
export RUN_COMMAND="$PYTHON_SCRIPT_LOC/pyscript.py PARAM1=VALUE1 PARAM2=VALU2 PAram3=value3"
echo "Run command from test.sh $RUN_COMMAND" >> $OUTFILE
echo " " >> $OUTFILE
echo " " >> $OUTFILE
echo "========================================================== Running Python script ==========================================================" >> $OUTFILE
echo "Before python command"
###############################################
( python $RUN_COMMAND >> $OUTFILE 2>&1 ) & pid=$!
SLEEP_TIME=1m
echo "before sleep - sleeping for $SLEEP_TIME $pid"
( sleep $SLEEP_TIME && kill -HUP $pid ) 2>/dev/null & watcher=$!
if wait $pid 2>/dev/null; then
echo "after sleep - sleeping for $SLEEP_TIME $pid"
echo "your_command finished"
pkill -HUP -P $watcher
wait $watcher
else
echo "after sleep - sleeping for $SLEEP_TIME $pid"
echo "your_command interrupted"
fi
### also tried this - did not work either
### python $RUN_COMMAND >> $OUTFILE 2>&1 &; (pythonPID=$! ; sleep 1m ;kill -s 2 $pythonPID)
.
.
我需要进行哪些更改,以便在脚本本身中终止该进程时将输出写入$ OUTFILE,而不是在终端上按ctrl-c?
可能您不想使用SIGHUP
(在控制终端或控制过程终止时检测到的挂断,而是
SIGINT 2 Term Interrupt from keyboard
有关更多信息,请阅读man 7 signal
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.