如何在.screenrc中转义管道以便在启动时运行命令?

时间:2011-04-14 15:31:03

标签: bash pipe gnu-screen

我正在使用byobu / screen,我希望新的屏幕会话默认包含一些专门用于拖尾特定日志文件的窗口。

我的.screenrc看起来像这样(从技术上讲这是我的.byobu/windows文件):

chdir /home/matt/code/project/logs
screen -t 'logs' tail -F current.log

chdir /home/matt/code/project
screen -t 'errors' tail -F current.log | grep -A 3 "ERROR"

chdir /home/matt/code/project
screen -t 'project'

chdir 
screen -t 'bash'

我的目的是在新的屏幕会话中设置四个窗口:

  1. 一个标题为“logs”的窗口,其中包含current.log文件
  2. 一个标题为“错误”的窗口,其中包含current.log文件和ERROR
  3. 的greps
  4. 一个名为“project”的窗口,从我项目的主目录
  5. 开始
  6. 一个名为“bash”的窗口,从我的主目录开始。
  7. 但是,screen -t 'errors' tail -F current.log | grep -A 3 "ERROR"命令中的管道最终会被屏幕按字面解释,因此我的第二个窗口永远不会出现。

    如何在此命令中转义管道以使其按照我的意愿解释?

    此外,是否有更简单的方法来设置screen / byobu以启动在启动时运行(复杂)命令的窗口?

3 个答案:

答案 0 :(得分:4)

我最终通过使用stuff命令模拟在窗口中输入命令并按Enter执行它来解决这个问题。这样就可以在屏幕窗口中突破tail命令而不会杀死窗口本身。

以下是我的.screenrc实现此目的的示例;我写了a longer explanation on my blog

screen -t 'errors'
stuff 'tail -F /var/ec/current.log | grep -A 3 "ERROR"^M'

(通过按Ctrl + V输入^ M,使用键盘输入,而不是实际输入插入符号和大写字母M)

答案 1 :(得分:3)

以下适用于我:

screen -t errors bash -c "tail -F current.log | grep -A 3 ERROR"

需要使用bash(或其他shell)来阻止屏幕提供“找不到文件” - 错误,如果从上面删除bash -c,将会产生结果。

答案 2 :(得分:0)

您应该可以创建自定义脚本并在.screenrc中使用它 - 所以你会有屏幕-t'错误'./bin/current.log.sh

并在current.log.sh中尾随-F ...