简体   繁体   中英

How can we prevent CTRL-C from screen terminating?

I'm currently writing a bash script that would create multiple shell instances (with screen command) and execute a subprogram . The problem is when I try to interrupt the subprogram, it interrupts the screen instance too. I already searched for trap command on internet with SIGINT but I don't really know how to use it in this case.

Here is my code to show you how do I create the screen:

#!/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

Could you help me more to find a solution please? Thank you very much for your time.

Each of your screen instances is created to run a single command, start.sh . When this command terminates, for instance when you interrupt it, the screen will have done its job and terminate. The reason for this is that screen runs shell scripts directly in a non-interactive shell, rather than spawning a new interactive shell and running it there. If you wanted to run start.sh inside an interactive shell in each screen, you'd do something like this:

screen -dmS "$name" /bin/bash -i
screen -S "$name" -X stuff "./start.sh^M"

The ^M is needed as it simulates pressing enter in your shell within screen.

If you use this, then when you interrupt a script within screen, you will still be left with an interactive prompt afterward to deal with as you see fit.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM