【发布时间】:2015-06-02 11:11:57
【问题描述】:
以下 switch 语句有奇怪的行为:
3)
if [ $state -ne $last_state ]
then
echo "state: $state"
fi
stty -F $SERIAL $BAUD -echo igncr
echo "befor cat"
{
cat -v $SERIAL >> $USBDRIVE/gpsData_$filecounter.txt && echo "after cat"
} || {
echo "catch"
state=0
last_state=3
((filecounter++))
}
;;
我想,当 cat 命令在执行过程中失败时,将写入“cat 之后”,而不是 || 之后的部分。将被执行。但是当我查看输出时,似乎在回显“after cat”之后发生了中断,因此实际状态不会改变,并且会再输入一次。然后 stty 也失败了(因为缺少串行适配器)。之后,cat命令再次失败,但现在进入“catch”块......
这是相关的输出:
pi@rpi ~/serial_logger $ ./serial_logger.sh
serial adapter found: ttyUSB0
state: 1
USB-Storage found: usb0
state: 3
before cat
after cat #here should be entered state 0
state: 3
stty: /dev/ttyUSB0: No such file or directory
before cat
cat: /dev/ttyUSB0: No such file or directory
catch
state: 0
USB-Storage found: usb0
state: 2
我做错了什么?
【问题讨论】:
-
按照你目前的逻辑,如果
after cat被回显,则说明cat退出成功。 -
但是当我评论 '&& echo "after cat"' 时,行为保持不变
-
只要
cat成功(它似乎正在这样做),删除echo不会有太大变化(我希望它也会成功)。 -
好的。当 cat 命令在串行适配器连接时启动时,它已成功。当我在 cat 已经启动并运行时断开适配器时,它是否也成功了?
标签: bash shell error-handling