Выполнить определенную команду только в первый раз в оболочке - PullRequest
2 голосов
/ 29 июля 2011

У меня есть скрипт.
Мне нужно выполнить определенную команду только в первый раз, когда я пытаюсь запустить этот скрипт в своей оболочке.В противном случае он не должен выполняться, а остальные команды должны быть выполнены.

Как я могу это реализовать?Все указатели приветствуются.

Спасибо,
Sen


Это код, который я пытался реализовать:

start_time=`date +%s`
echo $script_instance
if [ `echo $script_instance` == true ]; then
  end_time=`date +%s`
  echo '#########################################################################'
  echo '# Build Date : '`date`
  echo '# Compilation time : '`expr $end_time - $start_time` s
  echo '#########################################################################'
else
  echo '-------------------------------------------------------------------------'
  echo 'Updating the APIs'
  echo '-------------------------------------------------------------------------'
fi
script_instance=true
export $script_instance

Это работает неправильно.Пожалуйста, поправьте меня, если я где-то не прав.

Ответы [ 3 ]

2 голосов
/ 29 июля 2011

Вам, вероятно, следует проверить эффект возможного выполнения скрипта, а не тот факт, что он запущен. Например, он что-то строит? Если это так, проверьте наличие предполагаемого выхода.

В противном случае, если что-то не получится, просто создайте файл флага с touch $HOME/.some_hidden_file и проверьте его наличие.

Установка переменных не постоянна в UNIX.

2 голосов
/ 29 июля 2011

Вы можете установить переменную окружения при первом запуске скрипта:

  • csh / tcsh: setenv MYVARIABLE something
  • Баш: export MYVARIABLE="something"

Затем проверьте с помощью предложения if, установлена ​​ли переменная. Если это так, выполните другие действия, если нет, то это первый раз, когда скрипт выполняется.

1 голос
/ 30 июля 2011

Я не знаю контекст, но, возможно, вы можете просто удалить исполняемое разрешение из скрипта в конце:

chmod a-x $0

Затем, пока вы снова не chmod a+x <scriptname>, вы не сможетевыполнить его.Вы получите «Отказано в доступе».

Примечание после комментария:

В этом случае вы можете разделить скрипт на Always.sh и firstonly.sh.Используйте chmod a-x $0 в firstonly.sh и в always.sh do:

[ -x firstonly.sh ] && ./firstonly.sh

В качестве альтернативы, вы можете использовать какой-либо флаговый файл, как предложено в других ответах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...