2011-04-14 21 views
3

我正在使用byobu /屏幕,我希望有一個新的屏幕會話默認爲包含幾個窗口專門爲拖尾特定的日誌文件。如何在.screenrc中轉義管道以便在啓動時運行命令?

.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. 的窗口標題爲「日誌「,尾部爲current.log文件
  2. 窗口標題爲」錯誤「,尾部爲current.log文件,greps爲ERROR
  3. 標題爲「項目」的窗口在我的項目主目錄中開始
  4. 一個標題爲「bash」的窗口,它開始於我的主目錄。

但是,screen -t 'errors' tail -F current.log | grep -A 3 "ERROR"命令中的管道最終被字面解釋爲屏幕,因此我的第二個窗口從不出現。

我該如何在此命令中轉義管道以便按照我的意願解釋管道?

此外,有沒有更簡單的方法來設置屏幕/ byobu啓動在啓動時運行(複雜)命令的窗口?

回答

3

我最終通過使用stuff命令來模擬在窗口中輸入命令並按下Enter來執行它。這樣做的好處是可以在屏幕窗口中跳出尾部命令,而不會消除窗口本身。

這裏是我的.screenrc看起來要完成這個的一個例子;我已經寫了a longer explanation on my blog

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

(的^ M是按Ctrl + V,輸入與您的鍵盤,而不是由實際輸入插入符號和大寫字母M進入)

0

你應該罰款與創建自定義腳本,並在您的.screenrc使用它 - 那麼你將有屏幕-t「錯誤」 ./bin/current.log.sh

和尾部-F ... in current.log.sh

3

對我來說,以下工作:

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

使用的bash(或其它外殼)是必需的,以防止從屏幕給人一種「未找到文件」 -error,這將是如果bash -c從上面的除去的結果。

+1

請在您的代碼中添加一些解釋以幫助其他人將來 – 2015-02-11 09:00:31

+0

這似乎是一個更簡單的答案,它使用已知的'bash -c'語法,並且可以在.screenrc中正常播放 – 2016-07-13 11:50:14

相關問題