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