Aprendi que para capturar a saÃda de um comando Unix deve-se usar algo como
RESULT=$(command in question)
Eu quero capturar a versão da fsarchiver
variável RESULT
porque a opção anterior -z
foi fsarchiver
preterida. Deve-se usar -Z
para a versão 0.8.4 (aquela usada no Ubuntu 18.04 LTS). Para aplicar o nÃvel de compactação correto no meu script, ele precisa distinguir a versão atual do fsarchiver
.
Então eu tentei isso:
$ RESULT=$(fsarchiver --version)
fsarchiver 0.6.22 (2016-02-13)
$ echo "${RESULT}"
$
então este apenas retorna uma linha vazia. No entanto, posso determinar a versão ls
dessa maneira, portanto, tenho certeza de não ter entendido completamente mal a captura da saÃda de um comando para uma variável em um script bash:
$ RESULT=$(ls --version)
$ echo "${RESULT}"
ls (GNU coreutils) 8.25
Copyright © 2016 Free Software Foundation, Inc.
Lizenz GPLv3+: GNU GPL Version 3 oder höher <http://gnu.org/licenses/gpl.html>
Dies ist freie Software: Sie können sie ändern und weitergeben.
Es gibt keinerlei Garantien, soweit wie es das Gesetz erlaubt.
Geschrieben von Richard M. Stallman und David MacKenzie.
$
Por que fazer ls
e fsarchiver
se comportar de forma diferente em relação à captura de seus resultados ao solicitar suas versões?
fsarchiver
grava suas informações de versão em seu erro padrão,ls
em sua saÃda padrão. Qual deles está certo é uma questão de debate; veja Os relatórios/informações de registro de progresso pertencem a stderr ou stdout? para alguma discussão relacionada.ls
no seu caso, é provável que seja a versão GNU, e os padrões de codificação GNU exigem a gravação de informações de versão para o padrão .Você pode capturar a versão usando