0

我想要一个脚本:

  • 触发一个make 2&>1 | less -R
  • 监听文件夹中的每一个变化(使用inotifywait -R

修改文件夹后,脚本必须终止less进程并重新启动。

我不确定执行此操作的正确方法(允许脚本的两个分支并行运行 + 允许监视作业知道作业的 pid less,因为后者必须在前台)。

4

2 回答 2

2

如果您只想在每次更改某些内容时触发自动重新编译,那么您可以尝试以下操作:

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

我意识到这个解决方案不会在每次重新编译时杀死 less 命令

上面的一个轻微变化是在完成后放少:

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

此版本将立即触发重新编译(在第一次 make 完成后),但它需要您从 less 中分页浏览所有输出(并且不要用 q 终止它)

这是您可能想要玩的另一个变体。在这个版本中,如果您更改代码,正在进行的 make 将被终止并重新启动。但是,输出不会有屏幕分页(这很难与后台进程结合):

BGPID=0
while inotifywait -qqr /dir/to/watch; do
   [ "$BGPID" -gt 1 ] && kill $BGPID
   (make | tail -f)&
   BGPID=$!
done
于 2012-11-01T23:01:44.140 回答
1

而不是像下面这样使用较少的尝试尾巴。

制作命令:

make 2&>1 /output/file

和另一个终端中的tail命令:

tail -f /output/file

这应该向您显示所有正在发生的变化的实时流。

于 2012-11-01T20:02:26.287 回答