Bash: 运行 文件更改和标准输入命令

Bash: run command on file change and on standard input

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

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

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

我不想经常停止和开始 fswatch(就像在循环中一样),因为它可能会错过任何更改。

最好的方法是什么?

最简单的方法是将您的 while 循环置于后台并为命令行启动第二个 while 循环:

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 允许您使用两个以上的输入进程来使用您的循环。