Eu usei este script para obter a maioria do meu código. Eu estou tentando editá-lo onde o código é executado continuamente, mesmo quando ficar preso em um arquivo. O que acontece com o script dataanalysis.sh original é que alguns arquivos levam muito tempo, 2-3 dias, para rodar em xfoil ou simplesmente congelar. Isso é onde
timeout 1s xfoil $file < xfoil.com
entra. Eu quero que este stop xfoil seja executado e vá para o próximo arquivo. Onde estou tendo problemas é com o loop if:
if [ $? = 124 ]; then
xargs mv -t $file < /Failed/$file
it failed
fi
Isso deve mover o arquivo problemático para a pasta com falha, para que eu possa visualizar facilmente e possivelmente corrigi-los. Eu tinha debug configurado antes de me dizer quais arquivos falharam, então acho que a instrução if é executada, mas o arquivo nunca é movido. Eu pesquisei isso e estou perdido neste momento. Por favor ajude.
#!/bin/sh
bash -x ./script.sh
exec 5> debug_output.txt
BASH_XTRACEFD="5"
PS4='$lineno: '
cd ./airfoils
mkdir Failed
echo "failed airfoils" > failed.dat
#Then we loop over each file in the working directory whose name ends with .dat
for file in ./*.dat
do
#we write commands to a text file called xfoil.com, this first line overwrite the file and the subsequent lines append to it
echo "pane" > xfoil.com
echo "oper" >> xfoil.com
echo "visc 6.5e5" >> xfoil.com
echo "pacc" >> xfoil.com
#this is the only real dynamic line which we need
echo $file'.analysis' >> xfoil.com
echo "" >> xfoil.com
echo "aseq 0 14 1.0" >> xfoil.com
echo "pacc" >> xfoil.com
echo "" >> xfoil.com
echo "quit" >> xfoil.com
set -x
#we then run xfoil with its STDIN hooked up to the text file where we just wrote the commands to
echo $file
timeout 1s xfoil $file < xfoil.com
if [ $? = 124 ]; then
xargs mv -t $file < /Failed/$file
it failed
fi
#finally we delete the dat file as we have created the polar
set +x
rm $file
done
Este é o script inteiro
eu corri como
bash data.sh