Je souhaite rediriger la sortie dun programme vers un fichier avec un nom de variable et, en même temps, rediriger lerreur éventuelle. Voici le script pour linstant:

#!/bin/bash echo "Se ejecutará el PET-linux.x con PET.inp como input, debe indicarse el nombre del archivo output." echo "Nombre del archivo .out: " read outfile ./PET-linux.x < PET.inp > ${outfile}.out 2> /dev/null echo $? 

Si je lance le programme en sachant quil ferait une erreur, jobtiens ceci dans le terminal:

samuel@samuel-P5Wx6:~/Documents/Fisica/19-20/Radiactividad/Prácticas/Practicas-MontCarlo/PET/pruebas$ ./ejecutarPET.sh Se ejecutará el PET-linux.x con PET.inp como input, debe indicarse el nombre del archivo output. Nombre del archivo .out: test ./ejecutarPET.sh: line 7: 25715 Floating point exception(core dumped) ./PET-linux.x < PET.inp > ${outfile}.out 2> /dev/null 136 

Je sais pourquoi cette erreur se produit, mais je veux quelle napparaisse pas sur le terminal comme ça. « Est-ce que je peux utiliser 2> en même temps que >?

Merci.

Commentaires

  • Le shell exécutant le script signale lerreur, pas le programme PET-linux.x lui-même. La redirection sapplique uniquement au programme PET-linux.x .

Réponse

Comme cela a été souligné dans le commentaires , cest votre script shell signalant lexception en virgule flottante de votre application.

Modifiez la ligne PET-linux.x comme suit, pour intercepter lexception et quittez silencieusement. Vous pouvez tester lexception en vérifiant le statut de retour pour 136 et en le consignant comme il convient. (Si vous ne voulez pas le rapport, omettez simplement cette deuxième ligne. Je lai incluse afin que vous puissiez voir comment vous identifieriez une exception à virgule flottante par programme si vous en aviez besoin.)

( trap "exit" SIGFPE; ./PET-linux.x < PET.inp > "$outfile.out" ) 2>/dev/null [[ $? -eq 136 ]] && echo "Uh oh we caught a floating point exception" >&2 

Commentaires

  • Cela a fonctionné! Merci beaucoup!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *