Я редактировал скрипт, и по мере того, как скрипт становился немного длинным, я решил приложить основную часть скрипта в фигурных скобках и перевести вывод в файл журнала вместо с индивидуальными переадресациями журналов для команд. Затем я заметил, что командный блок, который проверяет текущую копию скрипта, дает 2 разных результата в зависимости от того, заключен ли он в фигурные скобки.Различные результаты при запуске команд в фигурных скобках в скрипте bash
Я бегу сценарий как:
$ /bin/bash scriptname.bash
Мой вопрос, почему одни и те же команды блок возвращает 2 разные результаты, и, если это возможно, чтобы иметь команду заблокировать работу внутри скобок.
Ниже приводится блок команд:
#!/bin/bash
#set -x # Uncomment to debug this shell script
#
##########################################################
# DEFINE FILES AND VARIABLES HERE
##########################################################
THIS_SCRIPT=$(basename $0)
TIMESTAMP=$(date +%Y-%m-%d_%H%M%S)
LOGFILE=process_check_$TIMESTAMP.log
##########################################################
# BEGINNING OF MAIN
##########################################################
{
printf "%s\n" "Checking for currently runnning versions of this script"
MYPID=$$ # Capture this scripts PID
MYOTHERPROCESSES=$(ps -ef | \grep $THIS_SCRIPT | \grep -v $MYPID | \grep -v grep | awk '{print $2}')
if [[ "$MYOTHERPROCESSES" != "" ]]
then
printf "%s\n" "ERROR: Another version of this script is running...exiting!"
exit 2
else
printf "%s\n" "No other versions running...proceeding"
fi
printf "%s\n" "Doing some script stuff..."
exit 0
} | tee -a $LOGFILE 2>&1
# End of script
Чем отличается ваш вывод? Можете ли вы показать результаты или, может быть, попробовать. – Klaus
Замечание: если вы хотите зарегистрировать как стандартную ошибку вывода _and_, перенаправление stderr должно произойти _before_ pipe (или использовать '| &' для канала). –
@Klaus - в то время как в фигурных скобках блок показывает, что работает другой скрипт. Когда за пределами фигурных скобок блок правильно оценивает, что другой копии не работает. – martin