Ik wil de uitvoer van een programma omleiden naar een bestand met variabelenaam en tegelijkertijd de mogelijke fout omleiden. Dit is het script tot dusver:
#!/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 $?
Als ik het programma uitvoer in de wetenschap dat het een fout zou maken, krijg ik dit in de 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
Ik weet waarom deze fout optreedt, maar ik wil dat het niet zo op de terminal verschijnt. Kan “ik 2>
niet tegelijkertijd gebruiken met >
?
Bedankt.
Opmerkingen
- De shell die het script uitvoert, rapporteert de fout, niet het PET-linux.x programma zelf. De omleiding is alleen van toepassing op het PET-linux.x programma .
Antwoord
Zoals is aangegeven in de opmerkingen , het is uw shellscript dat de uitzondering met drijvende komma uit uw toepassing rapporteert.
Wijzig de regel PET-linux.x
als volgt om de uitzondering op te vangen en stilletjes afsluiten. U kunt de uitzondering testen door de retourstatus van 136 te controleren en deze waar nodig vast te leggen. (Als u de rapportage niet wilt, kunt u die tweede regel weglaten. Ik heb deze toegevoegd zodat u kunt zien hoe je zou programmatisch een drijvende-komma-uitzondering identificeren als dat nodig was.)
( 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
Reacties
- Het werkte! Heel erg bedankt!