Ich möchte die Ausgabe eines Programms in eine Datei mit Variablennamen umleiten und gleichzeitig den möglichen Fehler umleiten. Dies ist das bisherige Skript:

#!/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 $? 

Wenn ich das Programm ausführe und weiß, dass es einen Fehler verursachen würde, erhalte ich dies im 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 

Ich weiß, warum dieser Fehler auftritt, aber ich möchte, dass er nicht so auf dem Terminal angezeigt wird. Kann ich 2> nicht gleichzeitig mit > verwenden?

Vielen Dank.

Kommentare

  • Die Shell, in der das Skript ausgeführt wird, meldet den Fehler, nicht das Programm PET-linux.x selbst. Die Umleitung gilt nur für das Programm PET-linux.x .

Antwort

Wie in Kommentare , es ist Ihr Shell-Skript, das die Gleitkomma-Ausnahme aus Ihrer Anwendung meldet.

Ändern Sie die Zeile PET-linux.x wie folgt, um die Ausnahme abzufangen Sie können die Ausnahme testen, indem Sie den Rückgabestatus für 136 überprüfen und gegebenenfalls protokollieren. (Wenn Sie die Berichterstellung nicht möchten, lassen Sie einfach diese zweite Zeile weg. Ich habe sie eingefügt, damit Sie sehen können, wie Sie würden eine Gleitkomma-Ausnahme programmgesteuert identifizieren, wenn Sie dies benötigen würden.)

( 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 

Kommentare

  • Es hat funktioniert! Vielen Dank!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.