簡體   English   中英

我們如何防止 CTRL-C 終止屏幕?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM