Mensagem de erro de script em uma única linha

0

Estou executando o comando

mv /prod/new/outputlog/error.log  /prod/hist/new/outputlog/error.log.32423423424

usando o script de shell.

Como o arquivo error.log não está disponível, o comando grava uma mensagem de erro no arquivo de log automaticamente. A mensagem de erro mv: cannot rename /prod/new/outputlog/error.log /prod/hist/new/outputlog/error.log.32423423424 não é agrupada em duas linhas.

Como é uma mensagem de erro gerada pelo sistema, não consigo controlar o tamanho da mensagem de erro de cada linha. Eu quero que o sistema envolva a mensagem depois que ela atingir o tamanho 80.

    
por Murali 12.09.2017 / 22:14

3 respostas

2

Você pode proteger a tentativa mv garantindo que o arquivo de origem exista antes de tentar renomeá-lo:

test -f /prod/new/outputlog/error.log &&
    mv /prod/new/outputlog/error.log /prod/hist/new/outputlog/error.log.32423423424

Ou você pode pegar a mensagem de erro e tentar dividi-la em duas linhas:

mv /prod/new/outputlog/error.log /prod/hist/new/outputlog/error.log.32423423424 2>&1 |
    fmt -s -w80 >&2
    
por 12.09.2017 / 22:42
1

Em vez de corromper a mensagem de erro, basta testar o arquivo que você está movendo antes de movê-lo:

if [ -f /prod/new/outputlog/error.log ]; then
    mv /prod/new/outputlog/error.log \
       /prod/hist/new/outputlog/error.log.32423423424
fi

ou usando lógica de atalho:

[ -f /prod/new/outputlog/error.log ] &&
mv /prod/new/outputlog/error.log \
    /prod/hist/new/outputlog/error.log.32423423424

Se a ausência do arquivo de log for um problema que precisa ser relatado, faça isso separadamente:

if [ -f /prod/new/outputlog/error.log ]; then
    mv /prod/new/outputlog/error.log \
       /prod/hist/new/outputlog/error.log.32423423424
else
    echo 'ERROR: /prod/new/outputlog/error.log is missing' >&2
fi
    
por 12.09.2017 / 22:42
0

Em vez de "corromper" o error.log, por que você não o trunca quando quiser visualizá-lo:

cut -c 1-80 error.log | less
    
por 12.09.2017 / 22:34