【问题标题】:Bash: run command on file change and on standard inputBash:在文件更改和标准输入上运行命令
【发布时间】:2017-09-21 15:30:51
【问题描述】:

我有一个使用 fswatch 的不错的文件观察器:

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

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

我不想经常停止和启动fswatch(就像循环一样),因为它可能会错过更改。

最好的方法是什么?

【问题讨论】:

    标签: bash sh stdin file-watcher fswatch


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-24
      • 2011-12-13
      • 2010-12-03
      • 1970-01-01
      • 2011-02-02
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多