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 允许您使用两个以上的输入进程来使用您的循环。
我有一个很好的文件观察器使用 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 允许您使用两个以上的输入进程来使用您的循环。