0
當談到shell腳本,我是一個新手。我究竟做錯了什麼?試圖從shell腳本中的命令測試零長度輸出
我想grep一個正在運行的日誌文件,並採取行動,如果grep返回數據。
# grep for "success" in the log which will tell us if we were successful
tail -f file.log | grep success > named_pipe &
# send signal to my server to do something
/bin/kill -10 $PID
timeout=0;
while : ; do
OUTPUT=$(cat < named_pipe)
if test [-n] $OUTPUT
then
echo "output is '" $OUTPUT "'"
echo_success
break;
else
timeout=$((timeout+1))
sleep 1
if [ $timeout -ge $SHUTDOWN_TIMEOUT ]; then
echo_failure
break
fi
fi
done
我發現,即使 「成功」 是不是在日誌中,測試[-n] $ OUTPUT返回true。這是因爲顯然OUTPUT等於「」。爲什麼輸出一個空格而不是空的?
我該如何解決這個問題?
謝謝。顯然,這個腳本有很多問題。不幸的是,即使有了改進,我顯然仍然沒有成功地寫入和讀取這個管道。我可以打開另一個終端,並在運行時成功執行「tail -f file.log | grep success」。但在我的腳本中,'如果test -n「$ OUTPUT」'從不返回true。 – vmayer
哦,我剛剛意識到有一個「mkfifo named_pipe」,我相信我應該打電話... – vmayer
我意識到我在這裏有一個額外的問題。基本上,named_pipe從未被刷新,因爲只有少量的數據被插入。所以,我決定改變一些東西去尾隨整個日誌文件,然後管道,然後從管道grep「成功」。由於某種原因,我還有更好的運氣管道進入臨時文件,而不是使用命名管道。 – vmayer