Проблема запуска одного скрипта из другого

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Проблема запуска одного скрипта из другого

Непрочитанное сообщение kpp » 2012-01-30 18:30:41

Есть скрипт (check_dial_ppp.sh), который проверяет канал в инет (PPP).
Скрипт сам по себе работает отлично. Также отлично работает и при запуске его из крона.
Теперь появилась надобность запускать этот скрипт не напрямую, а через второй скрипт.
Запускаю так:

Код: Выделить всё

CHECK_SCR="`sh check_dial_ppp.sh UP 4 75 "lenta.ru ex.ua"`"
CURR_STATE="$?"
где в переменной CHECK_SCR хочу получить текстовое описание результата скрипта, в CURR_STATE - код выполнения скрипта.

Если проверяемый канал по PPP упавший, скрипт check_dial_ppp.sh канал поднимает, полностью отрабатывает(видно по логу), но второй скрипт(из которого был вызван check_dial_ppp.sh) остается на строке

Код: Выделить всё

CHECK_SCR="`sh check_dial_ppp.sh UP 4 75 "lenta.ru ex.ua"`"
и стоит так, пока его насильно не убить ИЛИ если насильно убить созданный процесс

Код: Выделить всё

ppp -ddial intertelecom
.
Т.е. шелл, в котором был запущен скрипт check_dial_ppp.sh не завершает свою работу, пока порожденный в нем процесс ppp не завершится.
Как разрулить?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
fox
ст. лейтенант
Сообщения: 1154
Зарегистрирован: 2008-07-24 0:25:31
Откуда: Ukraine, Donetsk

Re: Проблема запуска одного скрипта из другого

Непрочитанное сообщение fox » 2012-01-30 19:00:52

Мне кажется, sh приставка лишняя и не нужны ковычки ""... Поэксперементируй.
Да пребудет с нами сила!!!
Всех убью, один останусь!

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Проблема запуска одного скрипта из другого

Непрочитанное сообщение kpp » 2012-01-30 22:27:53

Кавычки необязательны, действительно.
На счет sh изучаю вопрос.
Спасибо за наводку
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
fox
ст. лейтенант
Сообщения: 1154
Зарегистрирован: 2008-07-24 0:25:31
Откуда: Ukraine, Donetsk

Re: Проблема запуска одного скрипта из другого

Непрочитанное сообщение fox » 2012-01-31 0:57:21

Код: Выделить всё

`my_script.sh`;
Этого вполне достаточно...
А скрипт должен быть исполняемый и в нём первая строчка должна быть:

Код: Выделить всё

#!/bin/sh
Или другой интерпритатор это можно узнать whereis sh или bash или csh, между ними различие будет в синтаксее, вот ссылка по башу:
http://www.opennet.ru/docs/RUS/bash_scripting_guide/

А ещё можео ампрсант в конце строки скрипта поставить:

Код: Выделить всё

`my_scrip.sh &`;
Тогда он в бек-граунде запустет скрипт...
Да пребудет с нами сила!!!
Всех убью, один останусь!

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Проблема запуска одного скрипта из другого

Непрочитанное сообщение kpp » 2012-01-31 11:03:20

Это все понятно.
Файл скрипта исполняемый, первая строка

Код: Выделить всё

#!/bin/sh
, выполнение в фоне не требуется.
В чем разница:

Код: Выделить всё

`scripn.sh`
и

Код: Выделить всё

`sh script.sh`
По идее разницы в поведении быть не должно.
Однако разница есть...
Есть предположение, что разницы не будет, если во втором варианте убрать первую строку

Код: Выделить всё

#!/bin/sh
, иначе, по идее, запускается один шелл, и из него еще один шелл, хотя такое поведение, как мне кажется, не логично...
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Проблема запуска одного скрипта из другого

Непрочитанное сообщение kpp » 2012-01-31 11:28:18

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

Код: Выделить всё

PEREM="`script.sh`"
Причем,если результат скрипта не интересует, можно запустить скрипт просто

Код: Выделить всё

script.sh
При этом скрипт выполняется в порожденном интерпретаторе.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
fox
ст. лейтенант
Сообщения: 1154
Зарегистрирован: 2008-07-24 0:25:31
Откуда: Ukraine, Donetsk

Re: Проблема запуска одного скрипта из другого

Непрочитанное сообщение fox » 2012-01-31 12:27:23

Ну так у тебя получилось сделать то что надо или ещё нет?
Да пребудет с нами сила!!!
Всех убью, один останусь!

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Проблема запуска одного скрипта из другого

Непрочитанное сообщение kpp » 2012-01-31 12:34:25

Получиться то получилось, но не ясно почему по разному ведет себя.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Проблема запуска одного скрипта из другого

Непрочитанное сообщение kpp » 2012-02-03 15:32:24

И все-таки есть какая-то лыжа...
При таком запуске часто тоже скрипт check_dial_ppp.sh отрабатывает, но дальше не двигается...

Код: Выделить всё

CHECK_SCR=`check_dial_ppp.sh`
Пока выкрутился так:

Код: Выделить всё

check_dial_ppp.sh > /tmp/tmp_ppp.dat
CHECK_SCR=`cat /tmp/tmp_ppp.dat`
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.