我试图在我的。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