我從udev規則運行下面的腳本,這樣當我啓動打印機時,它會查找墨盒中的剩餘墨水,並通過這些信息查看電子郵件。總的來說,它運行良好,除了escputil命令輸出數據相當緩慢。因此,我的中間「out」文件是空的,並且通知電子郵件也是空的。Bash腳本:將慢速命令的輸出重定向到文件
我試過stdbuf來修復它,標準的重定向或tee,沒有幫助。 有什麼想法?在此先感謝,
#!/bin/sh
mkdir /var/lock/epson || exit 1
now=`date +%s`
limit=$((now - 1800))
if [ -f /tmp/epson.ink ] && [ `cat /tmp/epson.ink` -ge $limit ]; then
rmdir /var/lock/epson && exit 0
fi
sleep 6
stdbuf -oL -eL escputil --quiet --ink-level --raw-device /dev/usb/lp0 2>/dev/null | tee /tmp/epson.out
cat /tmp/epson.out | tail -5 | mail -s "Epson printer ink level" [email protected]
echo "$now" > /tmp/epson.ink
rmdir /var/lock/epson
exit 0
so'escputil'在'out'文件被寫入之前終止? – 2015-03-03 12:54:33
命令的運行速度有多慢並不重要。如果它寫入'stdout',管道會在命令返回前將其捕獲並寫入文件。你確定'escputil'不是寫給'stderr'而是寫什麼的? – 2015-03-03 12:58:25
不,因爲如果我在shell上運行這個命令,我得到了輸出。如果它打印到標準錯誤,重定向到/ dev/null,我不會看到任何輸出。 – 2015-03-03 13:39:01