【问题标题】:Shell script start 1 session with multiple windowsShell 脚本启动 1 个带有多个窗口的会话
【发布时间】:2014-05-01 23:43:00
【问题描述】:

我对 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

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

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

提前谢谢你!

阿贝丁

【问题讨论】:

  • “窗口”是什么意思?这是screen 特定的术语吗?你可能想用screen而不是shell来标记你的问题。
  • 我很抱歉打错了标签的家伙!我对 StackOverflow 也很陌生。我会在以后的帖子中记住评论!

标签: bash shell gnu-screen


【解决方案1】:

您可以使用-X 选项发送的命令不是shell 命令而是屏幕命令。

检查man 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

现在您可以附加到myscreen 会话并检查是否有 10 个窗口,并且每个窗口中都显示 hello0 .. hello9。

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

【讨论】:

  • 如果你想运行一个命令,一个好的习惯用法(来自 devstack)是有一个换行变量(NL=`echo -ne '\015'`)并将它附加到你的命令中,像这样:screen -S test -p 0 -X stuff "ping en.wikipedia.org$NL"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多