我从udev规则运行以下脚本,这样当我启动打印机时,它会查找墨盒中的剩余墨水并发送包含这些信息的电子邮件。总的来说,它运行良好,除了escputil命令输出其数据非常缓慢。因此,我的中间人" out"文件为空,通知电子邮件也为空。
我试过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@example.com
echo "$now" > /tmp/epson.ink
rmdir /var/lock/epson
exit 0
答案 0 :(得分:0)
联机帮助页escputil(1)
中的 BUGS 部分提到打印机在启动时可能无法立即返回结果。
我建议重复命令并在每次尝试后检查输出。在此示例中,我假设脚本启动时/tmp/epson.out
不存在或为空(否则在开头添加rm -rf
):
# as long as the file does not exist or is empty:
while ! [ -e /tmp/epson.out ] || [ $( wc -m < /tmp/epson.out ) -le 0 ]
do
escputil --quiet --ink-level --raw-device /dev/usb/lp0 2>/dev/null | tee /tmp/epson.out
sleep 5
done
我无法在此测试,但我认为stdbuf
对您没有用。