2012-11-01 119 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

你是正确的重编译将挂起,直到更少的终止。稍做改动就是在完成之后放置较少的命令。只是用这个更新了答案。不过,我意识到这不完全是你在找什么。 –