Bash静默错误处理



我试图在我的。sh脚本中运行程序(例如mv file1.txt file2.txt),我需要隐藏错误,但用我的脚本处理它。

目前我正在尝试做一些类似

的事情
EXECUTE="mv -v $VOL $BACKUP_YESTERDAY_CRYPT"
{
  EXEC_ERROR=$($EXECUTE)
} &2>> $LOG_FILE
if [[ -n $EXEC_ERROR ]]; then
  echo "There is an error!"
fi

但是它根本不起作用-它显示一个错误(例如mv: cannot stat 'file1.txt': No such file or directory)并且$EXEC_ERROR变量为空。

是否有办法得到输出变量+日志文件?

不如这样写:

mv -v $VOL $BACKUP_YESTERDAY_CRYPT 2>> $LOG_FILE
if [[ ! ( $? -eq 0 ) ]] ; then
    echo "There is an error!"
fi

虽然$?很适合保存和处理退出代码,但if语句被设计为接受任何命令,而不仅仅是[[[:

if ! mv -v "$VOL" "$BACKUP_YESTERDAY_CRYPT" 2>> $LOG_FILE; then
  echo "There is an error!"
fi

包括保存变量:

if OUTPUT=$(mv -v "$VOL" "$BACKUP_YESTERDAY_CRYPT" 2>> $LOG_FILE); then
  echo ">>> $OUTPUT <<<"
fi

事实上,if可以接受多个命令,正如它的手册页所描述的那样。关于布尔运算符(如!&&||)的文档隐藏在shell命令的描述中,它们形成管道(!)和列表(&&||)。

试试这个:

mv sourcefile destfile 2> /dev/null 1>logfile
returnstatus=`echo $?`
if [[ $returnstatus -ne 0 ]]; then 
    echo "There was an error!"
fi

最新更新