Linux 如何防止CTRL-C屏幕终止?

Linux 如何防止CTRL-C屏幕终止?,linux,bash,gnu-screen,sigint,bash-trap,Linux,Bash,Gnu Screen,Sigint,Bash Trap,我目前正在编写一个bash脚本,该脚本将创建多个shell实例(使用screen命令)并执行一个子程序。 问题是当我试图中断子程序时,它也会中断屏幕实例。我已经在互联网上用SIGINT搜索了trap命令,但我真的不知道在这种情况下如何使用它 以下是我的代码,向您展示如何创建屏幕: #/bin/bash #所有路径都在这里声明。 声明-A路径;宣布-a命令; 路径[“代理”]=/home/luna/proxy/HydraProxy;订单+=(“代理”) 路径[“bot”]=/home/luna/b

我目前正在编写一个bash脚本,该脚本将创建多个shell实例(使用screen命令)并执行一个子程序。 问题是当我试图中断子程序时,它也会中断屏幕实例。我已经在互联网上用SIGINT搜索了trap命令,但我真的不知道在这种情况下如何使用它

以下是我的代码,向您展示如何创建屏幕:

#/bin/bash
#所有路径都在这里声明。
声明-A路径;宣布-a命令;
路径[“代理”]=/home/luna/proxy/HydraProxy;订单+=(“代理”)
路径[“bot”]=/home/luna/bot;订单+=(“bot”)
#启动服务器
服务器=/home/luna/SERVERS
cd“$SERVERS”
对于dir in*/;做
d=$(基本名称“$dir”)
路径[“$d”]=“$(realpath$dir)”;订单+=(“$d”)
完成
用于“${orders[@]}”中的名称;做
如果!屏幕-列表| grep-q“$name”;然后
path=“${path[$name]}”
cd“$path”
屏幕-dmS“$name”。/start.sh
echo“$name创建于$path”
睡眠2
其他的
echo“屏幕$name已创建”
fi
完成

你能帮我找到更多的解决方案吗?非常感谢您的时间。

您的每个屏幕实例都是为运行单个命令而创建的,
start.sh
。当此命令终止时,例如当您中断它时,屏幕将完成其工作并终止。原因是screen直接在非交互式shell中运行shell脚本,而不是生成新的交互式shell并在其中运行。 如果要在每个屏幕的交互式shell中运行
start.sh
,可以执行以下操作:

screen-dmS“$name”/bin/bash-i
屏幕-S“$name”-X东西“/start.sh^M”
需要使用
^M
,因为它模拟在屏幕内的shell中按enter键


如果您使用此选项,那么当您在屏幕中中断脚本时,您仍然会看到一个交互式提示,以便在您认为合适的情况下进行处理。

请小心使用实际的回车符,而不是插入符号和M。我推荐
$'\r'
。您好,非常感谢您的回答,它解决了我的问题!