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