Como redirecionar stderr para variável dentro se condição? Bater

2

Eu tento obter a comunicação de erro padrão de mkdir -p $FINAL_BACKUP_DIR e enviar a mensagem por logger .

Isso torna o log mais completo, por exemplo, o usuário saberá que ele não tem permissão ou $FINAL_BACKUP_DIR não existe.

if ! mkdir -p $FINAL_BACKUP_DIR; then
    logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Standard error communicate. Backup canceling." 1>&2
    exit 1;
fi;

Eu tento algo assim:

if ! mkdir -p $FINAL_BACKUP_DIR 2>> ${test1}; then
    logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Backup canceling. $test1" 1>&2
    exit 1;
fi;

Mas esta solução não funciona para mim de duas maneiras. Quando eu crio test1 anterior test1=0 ou sem isso.

Eu trabalho com o Ubuntu 14.04.

    
por MartinP 21.07.2016 / 14:13

2 respostas

4

/dev/null é o dispositivo padrão para "jogar coisas fora".

Então

some_command 2> /dev/null

enviará os erros de some_command para /dev/null , ou seja, descarta os erros.

Assim:

if ! mkdir -p $FINAL_BACKUP_DIR 2> /dev/null
then
  logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Backup canceling."
  exit 1
fi

Note que você também não precisou de todos os caracteres ; extras: -)

EDITAR:

Você também pode direcionar o erro para a saída e capturar o resultado em uma variável e testar se essa variável está vazia. Desta forma, você pode relatar o motivo para o usuário

result=$(mkdir -p $FINAL_BACKUP_DIR 2>&1)
if [ -n "$result" ]
then
  logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Backup canceling: $result"
  exit 1
fi
    
por 21.07.2016 / 14:40
1

tente

if ! mkdir -p $FINAL_BACKUP_DIR > ${test1} 2>&1
then
    logger -t $LOGGER_TAG "Cannot create backup directory in $FINAL_BACKUP_DIR. Backup canceling. $(< ${test1})" 
    exit 1;
fi;

onde

  • > ${test1} de saída de redirecionamento (stdout)
  • 2>&1 diz ao bash para mesclar stderr e stdout
  • $(< $test1) leu o conteúdo do arquivo ${test1}
  • você precisa excluir ${test1}
  • testado no ubuntu 15.x, com um ${test1} válido
por 21.07.2016 / 14:39

Tags