Аренда серверов

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

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.

Ответить


Этот вопрос предназначен для предотвращения автоматической отправки форм спам-ботами.
Смайлики
:smile: :( ;-) :roll: :pardon: 8) :x :oops: :shock: :cz2: :-D :ROFL: :Yahoo!: :cry: :Search: :Bravo: :good: :bad: :sorry: :no: :unknown: :evil: :crazy: :"": :fool: :-o :drinks: :st: :bn:
Ещё смайлики…
BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЁН
Смайлики ВКЛЮЧЕНЫ
Обзор темы
   

Развернуть Обзор темы: Проблема запуска одного скрипта из другого

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`

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

Сообщение kpp » 2012-01-31 12:34:25

Получиться то получилось, но не ясно почему по разному ведет себя.

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

Сообщение fox » 2012-01-31 12:27:23

Ну так у тебя получилось сделать то что надо или ещё нет?

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

Сообщение kpp » 2012-01-31 11:28:18

На счет двойных кавычек.
Если результат скрипта многострочный, двойные кавычки нужны обязательно.
Код: Выделить всё
PEREM="`script.sh`"

Причем,если результат скрипта не интересует, можно запустить скрипт просто
Код: Выделить всё
script.sh

При этом скрипт выполняется в порожденном интерпретаторе.

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

Сообщение kpp » 2012-01-31 11:03:20

Это все понятно.
Файл скрипта исполняемый, первая строка
Код: Выделить всё
#!/bin/sh
, выполнение в фоне не требуется.
В чем разница:
Код: Выделить всё
`scripn.sh`

и
Код: Выделить всё
`sh script.sh`

По идее разницы в поведении быть не должно.
Однако разница есть...
Есть предположение, что разницы не будет, если во втором варианте убрать первую строку
Код: Выделить всё
#!/bin/sh
, иначе, по идее, запускается один шелл, и из него еще один шелл, хотя такое поведение, как мне кажется, не логично...

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 &`;

Тогда он в бек-граунде запустет скрипт...

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

Сообщение kpp » 2012-01-30 22:27:53

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

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

Сообщение fox » 2012-01-30 19:00:52

Мне кажется, sh приставка лишняя и не нужны ковычки ""... Поэксперементируй.

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

Сообщение 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 не завершится.
Как разрулить?

Вернуться к началу