2014-05-01 31 views
8

我很新的shell脚本(你可能会说我刚刚开始)。 我需要的是编写一个shell脚本来打开1个“屏幕”会话。然后,我想在同一个会话中打开多个窗口(例如10),并让每个会话都执行某些操作,例如打印“hello”。 因此,这里是我的代码的一部分,但它仅创建一个窗口(0),不打印窗口上的任何内容:就像我说的外壳脚本启动1个会话与多个窗口

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

,我的样本代码不起作用!它仅用一个窗口'0'打开一个会话,并且窗口'0'上的终端上没有打印任何内容。

您能否给我一些帮助?代码应该打开一个屏幕会话,然后在循环中打开10个窗口并在每个窗口中打印“hello”。

预先感谢您!

阿贝丁

+0

你是什么意思的“窗口”?这是一个“屏幕”特定的术语?你可能想用'screen'而不是'shell'来标记你的问题。 – dg99

+0

我很抱歉错误的标签家伙!我对StackOverflow也很新。我将在未来的帖子中留下评论! – user3578925

回答

9

的命令,您可以用-X选项发送未shell命令,但命令屏幕。

检查man screen中的CUSTOMIZATION部分以查看屏幕命令列表。 以下代码使用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 

现在,您可以连接到myscreen会议,并检查是否有10个窗口和hello0 .. hello9显示在每个窗口。

$ screen -r mysession 
[Press C-a "] 
+0

非常感谢@ymonad!这工作! – user3578925

+1

如果你想运行一个命令,一个好的习惯用法(来自devstack)应该有一个换行符变量('NL = \''echo -ne'\ 015''')并且将它附加到你的命令中,像这样:'' screen -S test -p 0 -X stuff“ping en.wikipedia.org $ NL”' – MartyMacGyver