Quero testar se há alguma saída do diff
(teste se os arquivos forem iguais), se não houver echo "Passed $x" else echo "Failed $x"
. Eu vim com uma etapa intermediária (salve a saída do diff para um arquivo e depois leia o arquivo)
diff "./helloworld$x.out" "./output/helloworld$x.out" > tmp.txt;
output="`cat tmp.txt`";
if [ "$output" = "" ];
then
echo "Passed $x";
else
echo "Failed $x";
fi;
Tenho certeza de que o código pode ser melhorado? A principal questão é: é possível salvar a saída diff
diretamente em uma variável?
... > /dev/null
faz neste contexto. A saída do diff vai para / dev / null, mas não é nada?diff
pode até suprimir completamente a saída, exceto a mensagem "Arquivos / bin / bash e / bin / sh differ" usando o código abaixo.Se você quiser ocultar essa mensagem, adicione
> /dev/null
depois do comando diff para ocultar a saída dediff
:/dev/null
é um arquivo especial que age como um buraco negro; se você escrever nele, ele desaparecerá; se você estiver lendo, não receberá nada de volta.Observe que o bash não precisa
;
terminar as linhas.Quanto à pergunta original, para salvar a saída de um programa em uma variável:
Maneiras alternativas de verificar se uma variável está vazia:
Se você estiver usando o Bash, os dois últimos comandos serão recomendados para comparação de cadeias. Caso contrário, o primeiro e
[ -n "$output" ]
é recomendado.fonte
a) A saída do comando1 pode ser capturada com
ou com backticks, mas esses são desencorajados, porque você não pode aninhar neles, e pode ser difícil distinguir dos apóstrofos, dependendo da fonte:
b) Em vez de gravar em um arquivo e, em seguida, ler esse arquivo (ou pegar a saída e repeti-la), você usaria um canal diretamente:
=>
mas no seu exemplo, você não está interessado no resultado, mas no resultado do programa - funcionou?
Para ler sobre o uso de && e || procure por "atalho AND e atalho OR".
Para manter a saída limpa, você pode redirecionar a saída de 'diff' para lugar nenhum:
Para obter sucesso e avaliá-lo mais tarde, você armazena o resultado do último comando em uma variável com $ ?:
fonte
Se você quiser saber se dois arquivos são iguais ou diferentes (mas não se importa com a diferença),
cmp
é mais adequado.fonte