Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> bash скрипт. получить статус завершения команды, как? 
V
    Опции темы
boostcoder
Дата 27.9.2010, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 3
Всего: 110



всем привет.
есть скрипт.
в нем что-то вроде:
Цитата

./configure .............
make
make install

мне нужно получить статус завершения каждой команды, и на основании его, решить, выполнять ли другие команды?

спасибо.
PM WWW   Вверх
djamshud
Дата 27.9.2010, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 14
Всего: 39



Код

# ping ya.ru -c 1
PING ya.ru (77.88.21.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (77.88.21.3): icmp_req=1 ttl=48 time=26.7 ms

--- ya.ru ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 26.781/26.781/26.781/0.000 ms
# echo $?
0
# ping хер
ping: unknown host хер
# echo $?
2


Добавлено через 52 секунды
Хм. Оперативненько:)


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 27.9.2010, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 3
Всего: 110



djamshud, а как мне это в if записать?
PM WWW   Вверх
djamshud
Дата 27.9.2010, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 14
Всего: 39



Ну, думаю, понятно, что для каждой команды $? можно запомнить в отдельную переменную или массив. А дальше man test, он используется внутри if. Сам я if не люблю, сделал бы так, к примеру:

Код

test ${exit1} -ne 0 && test ${exit2} -ne 0 && dosomething


Если же нужны разные действия на разные сочетания кодов возврата, то примерно так
Код


if [ ${exit1} -eq 0 ]; then

  if ...

  if...

fi



--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 27.9.2010, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 3
Всего: 110



если я тебя правильно понял, то должно получиться что-то вроде этого:

Код

ret1=./configure
if [ ${ret1} -eq 0 ]; then
   ret2=make
   if [ ${ret2} -eq 0 ]; then
      ret3=make install
      if [ ${ret3} -ne 0 ]; then
         echo make install error
      fi
   else
      echo make error
   fi
else
   echo configure error
fi


?


Это сообщение отредактировал(а) boostcoder - 27.9.2010, 20:47
PM WWW   Вверх
djamshud
Дата 27.9.2010, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 14
Всего: 39



Почти. Только ret-ы нужно получать так:

Код

./configure
ret1=$?


Ну и так далее в том же духе.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 27.9.2010, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 3
Всего: 110



понял.
спасибо smile

PM WWW   Вверх
djamshud
Дата 27.9.2010, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 14
Всего: 39



Да не за что.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
bilbobagginz
Дата 27.9.2010, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



boostcoder

есть несколько вариантов.
вариант I
если решил реально обрабатывать, то нередко в бАшке удобно создать 1 обработчик результатов:
грубо говоря - продолжаем, если 0, или вылетаем если не 0:
Код

function proc_retval {
    case $* in
      0) 
      echo "success!"
      ;;
      *)
      echo "failed with error: $*"
      exit $*
    esac
}

используем:
Код

for c in c1 c2 c3;
do
  $c
  retval=$?
  proc_retval $retval
done

вариант II:
используем направление обработки операторов bash:
Код

c1 && c2 && c3

&& обрабатывается слева направо. т.е. если c1 вернул 0, bash продолжит выполнять цепочку. если нет - вылетит.
т.е. если тебе нужна причина вылета, таким способом ея не получишь.





      


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
boostcoder
Дата 27.9.2010, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 3
Всего: 110



bilbobagginz, о!
спасибо большое smile

PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0789 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.