你可以從read -t 10
而不是睡眠命名管道讀:通過「其他人補充說:」命名管道道具
something()
{
echo "something"
}
somethingelse()
{
echo "something else"
}
mkfifo ~/.myfifo
while cat ~/.myfifo; do true; done |
while true
do
something
read -t 10 && somethingelse
done
現在,每當另一個腳本編寫與echo > ~/.myfifo
先進先出,循環會跳過目前等待並繼續下一次迭代。
這樣,不同的用戶或等待十秒鐘的不同腳本不會互相干擾。
下面的解決方案如果腳本在前臺運行並且您正在等待,則工作。當然,你需要一個有效的循環退出條件。您也可以檢查輸入的值並以不同的方式對其執行操作。在這種情況下,按除'j'以外的任何鍵都會迭代循環。按'j'會將某些人的輸出傳送給awk。
something()
{
echo "something"
}
somethingelse()
{
echo "something else"
}
while true; do
something |awk '{print "piping something: " $0 }'
read -t 3 -s -n 1 answer
if [ $? == 0 ]; then
echo "you didn't want to wait!"
fi
if [ "$answer" = "j" ]; then
somethingelse | awk '{print "piping something else: " $0 }'
fi
done
我上次試過這個,它似乎不適用於循環。我不知道爲什麼。它現在有效,謝謝。 – Marcel
值得一提的是,無論這些命令是否從腳本啓動,都將會終止這些「睡眠」命令。可能不值得擔心,但[這個問題](http://askubuntu.com/questions/575704/how-can-i-wake-a-sleeping-bash-script)有一個詳細的解決方案,其中的命令你想殺的並不是獨一無二的。 – miken32
@ miken32是的,我試圖用PID做點什麼。出於某種原因,當睡眠處於循環狀態時,它似乎不起作用。也許我只是一個小菜鳥。 – Marcel