Saída de comando na variável e suprimir saída padrão

1
time=$(TIMEFORMAT="%R"; { time /usr/bin/time -f "\n%E elapsed" curl -s "https://example.com"; } 2>&1)

ElapsedTime=$(echo "$time" | tail -c 23)

Os comandos acima funcionam como esperado, no entanto, não quero que o eco imprima na saída padrão. Eu só quero valor atribuído à variável.

    
por Koshur 03.03.2017 / 12:10

1 resposta

1

Não há diferença entre a primeira e a segunda atribuição, ou com var=$(echo foo) no que se refere à saída padrão.

Em sua segunda instrução:

ElapsedTime=$(echo "$time" | tail -c 23)

A saída padrão do comando, que é a saída padrão do pipeline, neste caso tail stdout, é atribuída ao conteúdo da variável e não exibida na tela.

Por outro lado, se um dos comandos internos exibir algo em seu fluxo de erro padrão, ele será exibido na tela, já que você não redireciona o stderr.

Observe que echo "$time" não é confiável. Eu recomendaria printf "%s\n" "$time" para evitar efeitos colaterais inesperados do valor time .

tail -c -number é POSIX, portanto, não esperaria que esse comando falhasse.

    
por 03.03.2017 / 18:04

Tags