对屏幕中的所有窗口执行命令

时间:2012-08-31 15:09:05

标签: gnu-screen

我使用屏幕,有时我会改变我的.bashrc个人资料。因此,我想对所有屏幕窗口应用.bashrc更改。不幸的是,屏幕读取仅用于创建新窗口的配置文件,并且不会为现有窗口重新加载.bashrc。

我的屏幕会话有一个或多个窗口。在附加屏幕之前,我想为每个窗口执行命令。命令很简单“source~ / .bashrc”。

我试试:

screen -X stuff "source ~/.bashrc"`echo -ne '\015'`

它仅适用于一个窗口。所以我无法使用“prev”或“next”命令迭代屏幕窗口。

我已经阅读了屏幕上的man,docs,而且我的事件尝试搜索我的问题的解决方案:)

你能指导我正确的方向吗?或者也许有人已经解决了类似的问题?

1 个答案:

答案 0 :(得分:1)

如果您使用的是最新版本的screen,则可以使用-Q选项,请参阅original threadthis answer。这可以在这里工作:

screen -Q windows | sed 's/[^0-9]*/\n/g; s/^\n//g' \
| while read; do 
    screen -S test -p $REPLY -X stuff "source ~/.bashrc"$'\n'
  done

使用:

$ screen --version
Screen version 4.01.00devel (GNU) 2-May-06

注意,如果您有多个会话,请使用-S命名。在这种情况下,我正在使用名为test的会话。 -p告诉屏幕将命令发送到哪个窗口。

还请注意使用ANSI-C quoting$'\n')。

执行-Q命令时,screen在运行命令之前等待msgwait秒,通过将msgwait设置为零并在执行后重置它来解决此问题,即

screen -S test -X msgwait 0
...
screen -S test -X msgwait 5

5是默认值。