[英]How can we prevent CTRL-C from screen terminating?
我目前正在编写一个bash脚本,它将创建多个 shell 实例(使用screen命令)并执行一个subprogram 。 问题是当我尝试中断子程序时,它也会中断屏幕实例。 我已经使用SIGINT在互联网上搜索了陷阱命令,但我真的不知道在这种情况下如何使用它。
这是我的代码,向您展示如何创建屏幕:
#!/bin/bash
#ALL PATHS ARE DECLARED HERE.
declare -A PATHS; declare -a orders;
PATHS["proxy"]=/home/luna/proxy/HydraProxy; orders+=( "proxy" )
PATHS["bot"]=/home/luna/bot; orders+=( "bot" )
#LAUNCH SERVERS
SERVERS=/home/luna/servers
cd "$SERVERS"
for dir in */; do
d=$(basename "$dir")
PATHS["$d"]="$(realpath $dir)"; orders+=( "$d" )
done
for name in "${orders[@]}"; do
if ! screen -list | grep -q "$name"; then
path="${PATHS[$name]}"
cd "$path"
screen -dmS "$name" ./start.sh
echo "$name CREATED AT $path"
sleep 2
else
echo "SCREEN $name IS ALREADY CREATED"
fi
done
你能帮我更多地找到解决方案吗? 非常感谢您的宝贵时间。
创建每个屏幕实例以运行单个命令start.sh
。 当此命令终止时,例如当您中断它时,屏幕将完成其工作并终止。 原因是屏幕直接在非交互式 shell 中运行 shell 脚本,而不是生成新的交互式 shell 并在那里运行它。 如果您想在每个屏幕的交互式 shell 中运行start.sh
,您可以执行以下操作:
screen -dmS "$name" /bin/bash -i
screen -S "$name" -X stuff "./start.sh^M"
^M
是必需的,因为它模拟了屏幕内 shell 中的按 Enter 键。
如果你使用它,那么当你在屏幕中中断一个脚本时,你仍然会留下一个交互式提示来处理你认为合适的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.