我从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