求助:在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+=("$?")

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...