我正在嘗試建立一個命令來啟動screen
、建立四個具有不同名稱的會話,並運行四個不同的命令。
我知道如何手動執行此操作:
1. screen
2. ./command1 args
3. CTRL-A :sessionname Session 1
4. CTRL-A C
5. (GOTO 2)
我可以用 bash 腳本之類的東西來做到這一點嗎?我該怎麼做呢?
答案1
screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"
$COMMAND
將產生一個在背景運行的螢幕。
您可以透過 來查看活動會話screen -ls
並透過 重新連線screen -r "$SESSION_NAME"
。
死會話可以透過 終止screen -wipe
。
答案2
若要自動啟動多個會話,請設定一個.screenrc
文件,即螢幕的設定檔。在其中,您可以建立會話、啟動程式、更改工作目錄等。
.screenrc 檔案的簡單範例:
# don't display the copyright page
startup_message off
# increase scrollback buffer size
defscrollback 10000
# create windows
screen -t TODO vim TODO.txt
chdir src
screen -t coding vim main.c
screen -t run
上面的命令screen
分別建立一個螢幕會話。-t
設定會話的標題;該行的其餘部分是要運行的命令及其參數。
因此,第一行和第二screen
行啟動一個會話並vim
在內部啟動。第三個只是開始一個會話並在出現提示時讓您下線。chdir
變更所有後續會話的工作目錄。
如果您想要多個.screenrc
文件,只需按照您想要的方式命名它們,然後選擇一個帶有screen -c myscreenrc
.
答案3
您可以一起使用 d、m、S 選項:
screen -Sdm s1
screen -Sdm s2
screen -Sdm s3
S:創建螢幕
d :從螢幕分離
m :強制建立螢幕,不論螢幕是否從另一個畫面內呼叫。
答案4
我有很多情況需要打開一組主機進行調查或支援。因為我只是偶爾需要這些額外的窗口,所以我決定使用 shell 腳本而不是.screenrc
方法。
例如在 ~/bin/prod_support 中:
#!/bin/bash
if [[ ! -z "$STY" ]]; then
screen -t "hosta" ssh hosta
screen -t "hostb" ssh hostb
else
echo "start up screen first"
fi
如果從一個運行非螢幕shell 我收到提醒...如果從內部螢幕運行,它將為每個腳本運行添加標題視窗。