1

这是一个 for 循环,它运行一个常规的 Whiptail 仪表。在这个循环中,一个命令可能会引发错误,我想显示一个--msgbox显示错误的消息框。在那之后,我可以让脚本继续下去,就像错误从未发生过一样。

这是一个过度简化的代码作为示例。这是它的行为和代码:

  • 一个 for 列表在一个包含 3 个数字和 1 个字母的数组上进行迭代。
  • 对于前 2 个数字,执行使用它们的命令并且量表增加 25%。
  • 对于字母,命令将失败,我想显示一个--msgbox错误等待我按回车
  • 对于最后一个数字,与其他 2 个数字的行为相同。
#!/bin/bash

array=("1" "2" "A" "3")

i=0
for element in "${array[@]}"; do
        command $element #This command will fail with any non int value.
        echo "XXX"
        echo $(expr 100 / 4 \* $i)
        echo ${array[$i]}
        echo "XXX"
        i=$((i+1))
        sleep 1
done | whiptail --title "Gauge" --gauge "Wait" 10 80 0

我已经尝试过一些类似的东西command $element || whiptail --title "Exception" --msgbox "Error!" 10 80。但是,由于消息框的鞭尾在仪表的循环中,因此输出被破坏。

问题可能来自我的设计?

谢谢您的帮助 :)

4

1 回答 1

0

即使已经询问了一段时间,您也可以输出到不同的输出描述符。就我而言,我输出到一个单独的日志文件,如下所示:

#!/bin/bash

array=("1" "2" "A" "3")

i=0
for element in "${array[@]}"; do
        command $element #This command will fail with any non int value.
        echo "XXX" >> logs.log
        echo $(expr 100 / 4 \* $i)
        echo ${array[$i]} >> logs.log
        echo "XXX" >> logs.log
        i=$((i+1))
        sleep 1
done | whiptail --title "Gauge" --gauge "Wait" 10 80 0

于 2022-01-10T15:20:36.507 回答