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

时间:2017-09-21 15:30:51

标签: bash sh stdin file-watcher fswatch

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

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

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

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

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

最简单的方法是将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允许您使用更多的两个输入过程来使用循环。