Como usar um espaço na seção de formato de data de saída de anotação?

1

Eu tento usar saída de anotação (parte do pacote devscripts), para prefixar saídas de um script com data e alguma informação extra. Primeiro parâmetro pode ser uma string de formato passada para data. Eu quero incluir um espaço nesta string de formato, no entanto, sendo um novato bash eu não tenho idéia, como escapar do espaço para obtê-lo enviado para data corretamente. Tentei um monte de opções, mas parece que não importa o que eu forneça, sys só come ...

A fonte de saída de anotação pode ser encontrada AQUI .

user@host:/home/user$ annotate-output '+myscript: %H:%M:%S' echo "A"
date: extra operand '%H:%M:%S'
Try 'date --help' for more information.
 I: Started echo A
date: extra operand '%H:%M:%S'
Try 'date --help' for more information.
 O: A
date: extra operand '%H:%M:%S'
Try 'date --help' for more information.
 I: Finished with exitcode 0

Resultado esperado:

myscript: 14:04:16 I: Started echo A
myscript: 14:04:16 O: A
myscript: 14:04:16 I: Finished with exitcode 0
    
por Vajk Hermecz 31.03.2014 / 15:03

2 respostas

1

Infelizmente, esse script tem alguns problemas de cotação. Isso funcionará se você adicionar essa função ao código:

date ()
{
    command date "$*"
}

Na verdade, você não precisa alterar a fonte. Faça isso: defina a função "data" e exporte-a:

$ date() { command date "$*"; }
$ export -f date
$ annotate-output "+foo %T"  bash -c "echo stdout; echo stderr >&2"
foo 10:38:30 I: Started bash -c echo stdout; echo stderr >&2
foo 10:38:30 E: stderr
foo 10:38:30 O: stdout
foo 10:38:30 I: Finished with exitcode 0

Pode haver problemas se o item que você está anotando também chamar date .

Se você quiser consertar a saída de anotações no seu sistema, aplique este diff

$ diff /usr/bin/annotate-output bin/annotate-output 
28c28
<       echo "'date ${FMT}' $1: $line"
---
>       printf "%s %s: %s\n" "$(date "$FMT")" "$1" "$line"
78c78
< echo "'date ${FMT}' I: Started $@"
---
> addtime I <<< "Started $*"
83c83
< echo "'date ${FMT}' I: Finished with exitcode $EXIT"
---
> addtime I <<< "Finished with exitcode $EXIT"
    
por 31.03.2014 / 16:33
1

Ele funcionará se você citar o parâmetro corretamente:

annotate-output '+"myscript: %H:%M:%S"' echo "A"
O argumento do formato do comando

date começa com + . Está certo. Mas, para passar espaço para isso, você deve colocar todos os caracteres após + entre aspas. Caso contrário, ele aceitará símbolos que estão seguindo o espaço em branco como segundo argumento de linha de comando.

    
por 31.03.2014 / 18:31