我正在尝试构建一个命令来启动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 我收到一个提醒...如果从屏幕内部运行,它将为每个脚本运行添加标题窗口。