微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

求助:在bash过程中向阵列添加错误消息

如何解决求助:在bash过程中向阵列添加错误消息

在这里我放置了工作示例,感谢大家的解决,并附上评论

#!/bin/bash

errors=()  #array to store all errors
to=""      #a variable
DEST=""    #another variable
from=""    #and so on

e=$(mv "$from" "$to" 2>&1) #this command makes first error
if [ -n "$e" ] ;then errors+=("$e"); fi  #and this save it to array

e=$(mv "$DEST" "$to" 2>&1)   #so this makes second error
if [ -n "$e" ] ; then errors+=("$e"); fi #and this saves it to array

if [ ${#errors[@]} -eq 0 ]; then #if no errors
   echo OK
else           #if there are error (YES)
    echo "ATTENZIONE: SI SONO VERIFICATI DEGLI ERRORI DURANTE L'OPERAZIONE DI RESTORE:"
    for t in "${errors[@]}"; do  #display all errors 
      echo "$t"
    done
fi

非常感谢。


这是解决方案之前的第一个应答软件:

我需要将bash文件中的所有错误消息添加到数组中。 感谢shellcheck.net和Cyrus和Freddy,我调整了代码

我做到了:

#!/bin/bash
#set -x    #DEBUG
errors=()
to=""
DEST=""

if ! mv "$from" "$to" ; then errors+=("$?"); fi

if ! mvv "$DEST" "$to" ; then errors+=("$?"); fi

if [ ${#errors[@]} -eq 0 ]; then 
   echo OK
else
    echo "ATTENZIONE: SI SONO VERIFICATI DEGLI ERRORI DURANTE L'OPERAZIONE DI RESTORE:"
    for t in "${errors[@]}"; do
      echo "$t"
    done
fi

我得到的输出是:


ATTENZIONE: SI SONO VERIFICATI DEGLI ERRORI DURANTE L'OPERAZIONE DI RESTORE:
0
0


如何获取数组“ $ errors”中正确的错误消息?

谢谢

解决方法

问题是您没有获得命令的退出状态(例如mv "$from" "$to"),而是得到了否定的命令(例如! mv "$from" "$to")的退出状态-命令失败(退出状态为非零),否定状态为成功(零)。为此,您需要避免在命令和记录状态之间取反状态。我知道最简单的方法是使用||而不是if,如下所示:

mv "$from" "$to" || errors+=("$?")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?