Pregunta

I'm trying to run programs (for example mv file1.txt file2.txt) in my .sh script and I need to hide errors, but handle it with my script.

Currently I'm trying to do something like

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

But it doesn't work at all - it shows an error (for example mv: cannot stat 'file1.txt': No such file or directory) and $EXEC_ERROR variable is empty.

Is there any way to get output to variable + to log file?

¿Fue útil?

Solución

How about something like:

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

Otros consejos

Though $? is good for saving and processing exit codes, the if statement is designed to take any command, not just [ or [[:

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

This includes saving variables:

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

In fact, if can take more than one command, as its man page describes. Documentation on boolean operators such as !, &&, and || is hidden within the description of shell commands, where they form pipelines (!) and lists (&&, ||).

Try this:

mv sourcefile destfile 2> /dev/null 1>logfile
returnstatus=`echo $?`
if [[ $returnstatus -ne 0 ]]; then 
    echo "There was an error!"
fi
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top