Shell脚本启动具有多个窗口的1个会话

use*_*925 10 bash shell gnu-screen

我对shell脚本很新(你可能会说我刚开始).我需要的是编写一个shell脚本来打开1"屏幕"会话.然后我想在同一个会话中打开多个窗口(比如说10个)并让每个会话做一些事情,例如打印"你好".所以这是我的代码的一部分,但它只创建一个窗口(0),并且不会在该窗口上打印任何内容:

#!/bin/bash
screen-d -m -S mysession
for n in {1..10}; do
    i=$(($n-1))
    screen -S mysession -p $i -X echo "hello"
done
Run Code Online (Sandbox Code Playgroud)

就像我说的,我的示例代码不起作用!它打开一个只有一个窗口'0'的会话,并且在窗口'0'上的终端上没有打印任何内容.

你能帮我个忙吗?该代码应该打开一个屏幕会话,然后在循环中打开10个窗口并在每个窗口中打印"hello".

先感谢您!

阿贝丁

ymo*_*nad 11

您可以使用-X选项发送的命令不是shell命令而是screen命令.

检查CUSTOMIZATION部分man screen以查看screen命令列表.以下代码使用screen命令创建新窗口和stuff命令以在窗口上显示文本.

#!/bin/bash
screen -d -m -S mysession
# window 0 is created by default, show hello0 on it
screen -S mysession -p 0 -X stuff hello0
for n in {1..9}; do
  # create now window using `screen` command
  screen -S mysession -X screen $n
  screen -S mysession -p $n -X stuff hello$n
done
Run Code Online (Sandbox Code Playgroud)

现在你可以附加到myscreen会话并检查每个窗口中是否有10个窗口和hello0 .. hello9.

$ screen -r mysession
[Press C-a "]
Run Code Online (Sandbox Code Playgroud)

  • 如果你想运行一个命令,一个好的习惯用法(来自 devstack)是有一个换行变量(`NL=\`echo -ne '\015'\``)并将它附加到你的命令中,像这样:`screen -S test -p 0 -X stuff "ping en.wikipedia.org$NL"` (2认同)