1

我有一个很好的使用 fswatch 的文件观察器:

cmd="go install ./..."
$cmd
fswatch -0 ./ | while read -d "" event; do
  echo "File Changed: $event"
  $cmd
done

现在我还想在命令行监听输入,所以如果我输入任何内容,$cmd将运行

我不想停下来开始fswatch很多(比如循环),因为它可能会错过更改。

做这个的最好方式是什么?

4

1 回答 1

3

最简单的方法是将您的 while-loop 放在后台并为命令行启动第二个 while-loop:

cmd="go install ./..."
$cmd
fswatch -0 ./ | while read -d "" event; do
    echo "File Changed: $event"
    $cmd
done &
while read -r line ; do
    echo "Commandline: $line"
    $cmd
done

还有一种使用fifo的方法:

mkfifo nicename
cmd="go install ./..."
$cmd
tail -f nicename | while read -d "" event; do
    echo "File Changed: $event"
    $cmd
done &

fswatch -0 ./ >> nicename &
cat >> nicename

fifo 允许您使用两个以上的输入进程来使用您的循环。

于 2017-09-22T10:29:18.500 回答