我们如何防止 CTRL-C 屏幕终止?
How can we prevent CTRL-C from screen terminating?
我目前正在编写一个 bash 脚本,它将创建多个 shell 实例(使用 screen命令)并执行 子程序 。
问题 是当我试图中断子程序时,它也中断了屏幕实例。我已经在互联网上用 SIGINT 搜索了 trap 命令,但我真的不知道在这种情况下如何使用它。
这是我的代码,向您展示了如何创建屏幕:
#!/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
创建的。当此命令终止时,例如当您中断它时,屏幕将完成其工作并终止。这样做的原因是屏幕 运行s shell 脚本直接在 non-interactive shell 中,而不是生成新的交互式 shell 和 运行宁那里。
如果你想 运行 start.sh
在每个屏幕的交互式 shell 中,你会做这样的事情:
screen -dmS "$name" /bin/bash -i
screen -S "$name" -X stuff "./start.sh^M"
^M
是必需的,因为它模拟在 shell 屏幕中按回车键。
如果你使用这个,那么当你在屏幕内中断一个脚本时,你仍然会留下一个交互式提示来处理你认为合适的。
我目前正在编写一个 bash 脚本,它将创建多个 shell 实例(使用 screen命令)并执行 子程序 。 问题 是当我试图中断子程序时,它也中断了屏幕实例。我已经在互联网上用 SIGINT 搜索了 trap 命令,但我真的不知道在这种情况下如何使用它。
这是我的代码,向您展示了如何创建屏幕:
#!/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
创建的。当此命令终止时,例如当您中断它时,屏幕将完成其工作并终止。这样做的原因是屏幕 运行s shell 脚本直接在 non-interactive shell 中,而不是生成新的交互式 shell 和 运行宁那里。
如果你想 运行 start.sh
在每个屏幕的交互式 shell 中,你会做这样的事情:
screen -dmS "$name" /bin/bash -i
screen -S "$name" -X stuff "./start.sh^M"
^M
是必需的,因为它模拟在 shell 屏幕中按回车键。
如果你使用这个,那么当你在屏幕内中断一个脚本时,你仍然会留下一个交互式提示来处理你认为合适的。