a) A saída do comando1 pode ser capturada com
output=$(diff "helloworld$x.out" "output/helloworld$x.out")
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:
output=`cmd1`
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:
cmd1 > file
cat file | cmd2
output=$(cmd1)
echo "${output}" | cmd2
=>
cmd1 | cmd2
mas no seu exemplo, você não está interessado no resultado, mas no resultado do programa - funcionou?
diff "helloworld$x.out" "output/helloworld$x.out" && echo "success" || echo "failure"
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:
diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null && echo "success" || echo "failure"
Para obter sucesso e avaliá-lo mais tarde, você armazena o resultado do último comando em uma variável com $ ?:
diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null
result=$?
# do something else
case $result in
0) echo success ;;
*) echo failure ;;
esac
... > /dev/nullfaz neste contexto. A saída do diff vai para / dev / null, mas não é nada?