2012-11-01 118 views
0

我想有這將腳本:殺兄弟的過程

  • 觸發一個make 2&>1 | less -R
  • 收聽該文件夾中的每一個變化(使用inotifywait -R

當文件夾被修改,腳本將不得不殺死less進程並重新啓動。

我不確定正確的做法(允許腳本的兩個分支並行運行+允許觀看作業知道less作業的pid,因爲後者必須位於前景)。

+0

這是什麼總體目標?你是否希望能夠監視make,每次更新都刷新視圖? – Lipongo

+0

是的。我希望並排使用兩個終端,並在每次保存文件時重新編譯(以查看新的編譯錯誤)。 –

+0

將輸出重定向到一個文件,而不是管道到少於在另一個終端中使用tail -f fileName是可以接受的嗎?它保持對文件的公開流,並在不需要做任何事情時顯示更新。 – Lipongo

回答

1

而不是像下面那樣使用更少的嘗試尾巴。

make命令:

make 2&>1 /output/file

和tail命令中的其他終端:

tail -f /output/file

這應該告訴你的所有發生變化的實時流。

+0

是的,但我不能看到所有的錯誤(通過滾動到文件中)。 –

+0

如果你想搜索特定的東西,比如錯誤,你可以grep尾部-f關鍵字如「ERROR」。只需將命令更改爲'tail -f/output/file | grep ERROR',它只會顯示錯誤,希望減少滾動屏幕。 – Lipongo

2

如果你只是想觸發自動重新編譯每次的東西改變了,那麼你可以嘗試以下方法:

while inotifywait -qqr /dir/to/watch; do 
    make | less 
done 

我意識到,這個解決方案不殺少一個重新編譯的每次發出命令

上述情況的一個細微變化是把完成後少:

while inotifywait -qqr /dir/to/watch; do 
    make 
done | less 

這個版本將立即觸發重新編譯(AFTE r第一個make完成了),但是它需要你瀏覽所有從較少的輸出(並且不要用q終止它)

這裏是另一個你可能想要玩的變體。在此版本中,如果更改代碼,正在進行的make將會被殺死並重新啓動。但是,將不存在屏幕分頁輸出(這很難與後臺進程結合):

BGPID=0 
while inotifywait -qqr /dir/to/watch; do 
    [ "$BGPID" -gt 1 ] && kill $BGPID 
    (make | tail -f)& 
    BGPID=$! 
done 
+0

重新編譯不會被觸發,直到'less'終止(按'q')。 –

+0

你是正確的重編譯將掛起,直到更少的終止。稍做改動就是在完成之後放置較少的命令。只是用這個更新了答案。不過,我意識到這不完全是你在找什麼。 –