a) La sortie de command1 peut être capturée avec
output=$(diff "helloworld$x.out" "output/helloworld$x.out")
ou avec des crochets, mais ceux-ci sont déconseillés, car vous ne pouvez pas les imbriquer, et ils peuvent être difficiles à distinguer des apostrophes, selon la police:
output=`cmd1`
b) Au lieu d'écrire dans un fichier, puis de lire ce fichier (ou de saisir la sortie, puis de l'écho), vous utiliseriez directement un tuyau:
cmd1 > file
cat file | cmd2
output=$(cmd1)
echo "${output}" | cmd2
=>
cmd1 | cmd2
mais dans votre exemple, vous n'êtes pas intéressé par le résultat, mais par le résultat du programme - cela at-il fonctionné?
diff "helloworld$x.out" "output/helloworld$x.out" && echo "success" || echo "failure"
Pour en savoir plus sur l'utilisation de && et || recherchez "raccourci ET et raccourci OU".
Pour garder la sortie propre, vous pouvez rediriger la sortie de 'diff' vers nulle part:
diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null && echo "success" || echo "failure"
Pour saisir le succès et l'évaluer plus tard, vous stockez le résultat de la dernière commande dans une variable avec $ ?:
diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null
result=$?
# do something else
case $result in
0) echo success ;;
*) echo failure ;;
esac
... > /dev/null
passe dans ce contexte. La sortie de diff sera goto / dev / null mais n'est-ce pas rien?