我正在使用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'
我的目的是在新的屏幕会话中设置四个窗口:
current.log
文件current.log
文件和ERROR
但是,screen -t 'errors' tail -F current.log | grep -A 3 "ERROR"
命令中的管道最终会被屏幕按字面解释,因此我的第二个窗口永远不会出现。
如何在此命令中转义管道以使其按照我的意愿解释?
此外,是否有更简单的方法来设置screen / byobu以启动在启动时运行(复杂)命令的窗口?
答案 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 ...