![]() |
Модераторы: powerfox, ZeeLax |
![]() ![]() ![]() |
|
savigm |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 15.12.2008 Где: г. Зеленоград Репутация: нет Всего: нет |
Всем добрый день.
На форуме нет отдельной темы по Linux оболочке Bash, предлагаю все вопросы, касающиеся Bash обсуждать в этой теме. Я изложу суть своего вопроса: Есть первый скрипт, вызывающий второй. Второй является дочерним процессом первого. Вопрос: как можно вернуть значение переменной из второго скрипта (дочернего процесса) в первый (родительский процесс)? У меня пока только идея сохранить его в файл во втором скрипте и прочитать его в первом, но по-моему это кривое решение. |
|||
|
||||
powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 26 Всего: 97 |
Этой теме место в http://forum.vingrad.ru/forum/Linux-Unix-c...-questions.html
savigm, скрипт всё равно, что программа: по завершении остаётся лишь вывод (если быть точным, то 2) + статус завершения. Обычно скрипты взаимодейтсвуют, через конвеер: script1 | script2, таким образом стандартный вывод script1 является стандартным вводом для script2. Если же нужно, чтобы возвращалось значение, то нужна функция (и то, возвращает то же, что может вернуть скрипт). Это сообщение отредактировал(а) powerfox - 30.3.2009, 01:18 |
|||
|
||||
savigm |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 15.12.2008 Где: г. Зеленоград Репутация: нет Всего: нет |
powerfox, второй скрипт может передать первому значение и без функций - exit <код возврата>, но так как идеологически код возврата 0 - норм. звершение программы(скрипта), не 0 - код ошибки мне бы хотелось передавать значение из второго скрипта(вызванного из первого) через переменную.
А насчет переноса темы по-моему это спорный вопрос: с одной стороны Bash - оболочка в Linux, с другой - коммандный язык программирования. Я думаю для Bash нужно две темы - одна по программированию в Bash(Bash-scripting), вторая по использованию и настройке. Это сообщение отредактировал(а) savigm - 29.3.2009, 01:59 |
|||
|
||||
Cr@$h |
|
|||
![]() Исследователь ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1693 Регистрация: 3.4.2005 Где: Санкт-Петербург, Россия Репутация: нет Всего: 41 |
Модератор: Пожалуйста, один топик - один вопрос.
Правила форума: http://forum.vingrad.ru/index.php?act=boardrules Модератор: bash - командный процессор. Тему по всем вопросам создавать нельзя. Поднимать вопрос о создании подфорума для оболочки POSIX нужно в разделах *nix |
|||
|
||||
powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 26 Всего: 97 |
Я об этом написал. Просто не всегда нужно передавать число. |
|||
|
||||
savigm |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 15.12.2008 Где: г. Зеленоград Репутация: нет Всего: нет |
Т.е. скрипт может возвращать не только число? Как? С помощью exit можно вернуть только числа [0..255]. Мне необходимо, чтобы второй скрипт возвращал 0 или не 0 информируя о нормальном завершении, либо о номере ошибки, собственно как это и должно быть, но нужно еще передать и строковую переменную. Здесь уже видимо без создания временного файла не обойтись.
|
|||
|
||||
xaran4o |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 29.3.2009 Репутация: нет Всего: нет |
Переменная определенная в "родительском" скрипте с префиксом export, видна в "дочернем". ![]() ![]() |
|||
|
||||
powerfox |
|
||||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 26 Всего: 97 |
Всё зависит от того, что у вас за скрипт2.
Видна не значит, что если её изменить в дочерней оболочке (именно в ней запустится скрипт), изменения затронут переменную в родительском. Механизма «обратного» экспорта не существует. Есть команда '.', которая позволяет выполнить команды скрипты, за запуская дочернюю оболочку, но это не самый элегантый способ. Эта команда было специально создана для обновления .profile, а не для выполнения скриптов. savigm, а чем не устраивает вывод второго скрипта?
Если у скрипта есть дополнительный вывод, то можно использовать регулярные выражения (или sed/awk), чтобы получить значение из строки "MY_SUPER_SCRIPT_RESULT=qweqweqweqw". |
||||
|
|||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 2 Всего: 17 |
если я правильно понял |
|||
|
||||
savigm |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 15.12.2008 Где: г. Зеленоград Репутация: нет Всего: нет |
Обьясню: в первом скрипте читаются статусные файлы, читаются директории и т.п., на основании этой информации идет часть выдачи, потом выполняется программа, на основании результата(результат пишется в файл) выполненной программы идет остальная выдача. По предложенному варианту эта выдача будет идти сразу, а не частями, а хотелось бы чтобы было как в первом скрипте: сначала первая часть выдачи, потом результат программы. Дублировать часть кода для первой части выдачи во втором скрипте неохота, тем более это будет двойная работа. |
|||
|
||||
powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 26 Всего: 97 |
Я не понял, что вы хотите. Во всяком случае это не соответствует тому, что вы спросили в начале темы. |
|||
|
||||
Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 3 Всего: 22 |
Добавлено через 1 минуту и 4 секунды my_very_needed_bin может выводить в обычный и поток ошибок... если нужно, и еще вовращать статус выхода! Этого достаточно? ![]() Добавлено через 1 минуту и 45 секунд $? - это.... артефакт ![]() ![]() |
|||
|
||||
xaran4o |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 29.3.2009 Репутация: нет Всего: нет |
поясните новичку, чем плоха комманда "." Чревата коллизиями, это понятно, если используешь "чужой" скрипт. А еще? Если я пишу "родительский" и "дочерний" скрипты сам?? |
|||
|
||||
powerfox |
|
|||
![]() I wanna fork() ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3990 Регистрация: 1.10.2005 Где: Санкт-Петербург Репутация: 26 Всего: 97 |
Тем, что нужно следить за именами функций и переменных. А если потом захочется один из скриптов использовать отдельно, то можно попасть в просак. Эта команда, как Goto в С/C++: мощная штука, но нужно применять с умом. |
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 21 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Linux/UNIX: Oбщие вопросы" | |
|
В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу). В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим. Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |