2009-01-06 11 views
2

J'ai un script bash qui exécute un programme de simulation écrit en Fortran 90, et toutes les sorties sont redirigées vers un fichier. Si le programme se termine sans problèmes, je définis un paramètre de succès. Le code ressemble à ceci:Comment puis-je supprimer la sortie due à un SIGSEGV ou à un SIGFPE dans un programme Fortran 90?

 
#!/bin/bash 
... 
echo -n "Running program..." 
./sim_program >& file && success="true" 
if [ $success ]; then 
    echo "OK" 
else 
    echo "NOT OK" 
fi 
... 

La sortie à l'écran doit être « programme en cours ... OK » ou « programme en cours ... PAS OK ». Dans certains cas, le programme de simulation se bloque avec une exception à virgule flottante ou une erreur de segmentation, et les signaux correspondants sont envoyés (SIGSEGV/SIGFPE). La sortie peut alors ressembler à ceci:

 
:~>execute_script 
Running program.../path/to/script: line 232: 15350 Floating Point Exception ./sim_program >& file && success="true" 
NOT OK 

Comment puis-je supprimer la sortie d'erreur en raison de la SIGFPE ou SIGSEGV telle que je reçois

 
:~>execute_script 
Running program... NOT OK 

même quand il y a une telle erreur? J'ai examiné en utilisant un piège, par exemple.

 
trap "" SIGSEGV SIGFPE 
./sim_program >& file && success="true" 
trap SIGSEGB SIGFPE 

mais je reçois toujours quelque chose comme

 
:~>execute_script 
Running program... Floating Point Exception 
NOT OK 

Toute aide est appréciée!

Répondre

2

Ce message d'erreur va probablement stderr.

Essayez de mettre ceci au début de votre script:

#!/bin/bash 
exec 2> /dev/null 

et tout envoyer à stderr ira à l'appareil null plutôt que votre terminal.

+0

Merci, ça a marché! :) –

0

Je crois que votre message d'erreur est écrit sur stderr. Vous devez le rediriger vers/dev/null.

./sim_program 2>/dev/null