Puede usar tee
cuando inicie el programa. Si está usando bash, puede hacer:
program > >(tee -a log.txt)
Eso redirigirá la salida estándar de program
a una sustitución de proceso que ejecuta tee
. Eso esencialmente escribe una copia de la salida estándar de program
a log.txt
. tee
continuará enviando la salida estándar a donde sea que vaya antes, probablemente la terminal dependiendo de cómo funcione program
.
Здесь есть пара вопросов. В основном вы повторяете два цикла, один внутриfix.sh
(с циклом while )и снова рекурсивно, вызывая dummy.sh
. Кроме того, вы сбрасываете файл счетчика обратно в ноль в начале fix.sh
, поэтому он никогда не сможет считать. У вас также есть обратный порядок, поэтому (рекурсивные )вызовы dummy.sh
происходят до того, как вы увеличиваете счетчик.
Предполагая, что требуется только рекурсивное поведение (, так как вы можете изменить dummy.sh):
#!/bin/bash -x
TEMCOUNTER_TMP=/home/user/etc/FILE_NAME"_tmp6"
RETRY_LOGIC=`cat $TEMCOUNTER_TMP`
echo $RETRY_LOGIC
# Does RETRY_LOGIC have a value?
if [ -z "$RETRY_LOGIC" ]
then
RETRY_LOGIC=0
echo 0 > $TEMCOUNTER_TMP
fi
# Try to apply fix
[ $((RANDOM %3)) = 0 ]
# Did it work?
if [ $? = 0 ]
then
echo "Success!"
rm $TEMCOUNTER_TMP
exit
fi
if [ $RETRY_LOGIC -le 3 ]
then
export RETRY_LOGIC=`expr $RETRY_LOGIC + 1`
echo $RETRY_LOGIC > $TEMCOUNTER_TMP
echo "Retrying..."
/home/user/etc/Dummy.sh
else
echo "Giving up"
rm $TEMCOUNTER_TMP
fi
Кроме того, внимательно проверьте свои пути, вы добавили префикс /home/user/etc/
к переменной TEMCOUNTER_TMP
только в одном месте.
Обратите внимание, что командаexport
делает $RETRY_LOGIC
доступной при последующих попытках, поэтому, пока эта переменная не используется где-либо еще, вы можете удалить все строки, ссылающиеся на TEMCOUNTER_TMP
, и все будет работать так же. Если вам действительно нужен этот файл, обратите внимание, что ловушка может быть лучше, чтобы потом очистить его.