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!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *