Вызов "себя" из скрипта
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 26.05.15 08:22
Оценка:
Вопрос, вроде как, невероятно прост, но я что-то все торможу... Итак, имеется RH5 и приложение scl (бинарная аппликуха принимающая на вход команду shell, которую надо исполнить). Например запустить мой скрипт при помощи scl можно так:
scl enable devtoolset-2 './foo.sh arg1 arg2'


Мне необходимо из скрипта вызвать самого себя через scl при определенных условиях. Как вызвать самого себя вроде очевидно, а вот как вызвать самого себя через промежуточное приложение?
Re: Вызов "себя" из скрипта
От: v_andal Германия  
Дата: 26.05.15 08:32
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Вопрос, вроде как, невероятно прост, но я что-то все торможу... Итак, имеется RH5 и приложение scl (бинарная аппликуха принимающая на вход команду shell, которую надо исполнить). Например запустить мой скрипт при помощи scl можно так:

KP>
KP>scl enable devtoolset-2 './foo.sh arg1 arg2'
KP>


KP>Мне необходимо из скрипта вызвать самого себя через scl при определенных условиях. Как вызвать самого себя вроде очевидно, а вот как вызвать самого себя через промежуточное приложение?


То есть нужно внутри шеловского скрипта запустить этот же скрипт ещё раз? А в каком месте возникает проблема? Вроде бы просто пишешь

if <условие>
scl enable devtoolset-2 './foo.sh arg1 arg2'
fi

и всех делов. Какие здесь возникают грабли? Может нужно уточнить, что подразумевается под "вызвать самого себя"?
Отредактировано 26.05.2015 8:34 v_andal . Предыдущая версия .
Re[2]: Вызов "себя" из скрипта
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 26.05.15 08:44
Оценка:
Здравствуйте, v_andal, Вы писали:

_>То есть нужно внутри шеловского скрипта запустить этот же скрипт ещё раз? А в каком месте возникает проблема? Вроде бы просто пишешь


_>if <условие>

_> scl enable devtoolset-2 './foo.sh arg1 arg2'
_>fi

Да, именно так как я и пытаюсь сделать. Результат: второй вызов просто не происходит

_>и всех делов. Какие здесь возникают грабли? Может нужно уточнить, что подразумевается под "вызвать самого себя"?


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

scl enable devtoolset-2 'bash'
./foo.sh arg1 arg2      # <- тут у нас уже новая сессия
Re[3]: Вызов "себя" из скрипта
От: watchyourinfo Аргентина  
Дата: 26.05.15 09:11
Оценка:
?

bash -c 'x y z'
Re: Вызов "себя" из скрипта
От: RomikT Германия  
Дата: 26.05.15 09:13
Оценка: 27 (1)
Здравствуйте, kaa.python, Вы писали:

KP>Вопрос, вроде как, невероятно прост, но я что-то все торможу... Итак, имеется RH5 и приложение scl (бинарная аппликуха принимающая на вход команду shell, которую надо исполнить). Например запустить мой скрипт при помощи scl можно так:

KP>
KP>scl enable devtoolset-2 './foo.sh arg1 arg2'
KP>


KP>Мне необходимо из скрипта вызвать самого себя через scl при определенных условиях. Как вызвать самого себя вроде очевидно, а вот как вызвать самого себя через промежуточное приложение?


А если в начале скрипта написать
source /opt/rh/devtoolset-2/enable
не заработает? Без перезапуска самого себя.
Re[2]: Вызов "себя" из скрипта
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 26.05.15 09:23
Оценка: :)
Здравствуйте, RomikT, Вы писали:

RT>А если в начале скрипта написать

RT>
RT>source /opt/rh/devtoolset-2/enable
RT>
не заработает? Без перезапуска самого себя.


Оно!!!
Re[3]: Вызов "себя" из скрипта
От: v_andal Германия  
Дата: 26.05.15 09:55
Оценка:
Здравствуйте, kaa.python, Вы писали:
_>>и всех делов. Какие здесь возникают грабли? Может нужно уточнить, что подразумевается под "вызвать самого себя"?

KP>самого себя значит скрипт определили что ему нужно выполняться в другом окружении, а для этого необходимо вызвать scl. Если бы речь шла о консоли, то все выглядело бы так:


KP>
KP>scl enable devtoolset-2 'bash'
KP>./foo.sh arg1 arg2      # <- тут у нас уже новая сессия
KP>


На сколько я понимаю, здесь уже вызов происходит интерактивным образом, то есть scl запускает bash, а уже внутри bash даётся команда на выполнение скрипта. Изнутри скрипта такую "интерактивность" уже не сделаешь. То есть внутри скрипта нужно делать
scl enable devtoolset-2 './foo.sh arg1 arg2'
Если так не срабатывает, то значит что-то не так с окружением. Либо текущая директория не содержит foo.sh, либо что-то мешает его выполнению, либо scl что-то не устраивает. Возможно проблема с передачей аргументов. В идеале нужно перехватывать stderr и смотреть, какие ошибки вылазят. Вопрос только, позволяет ли scl перехватывать ошибки выполняемой команды, или же они просто сливаются в /dev/null.

Update. Хотя вижу, что люди знающие scl уже предложили решение
Отредактировано 26.05.2015 10:00 v_andal . Предыдущая версия .
Re: Вызов "себя" из скрипта
От: zaufi Земля  
Дата: 28.05.15 22:14
Оценка: 17 (2)
небольшое дополнение чтобы не париться со строками при вызове `scl` (возможно этих строк вложенных и без этого дофига)

scl enable devtoolset-2 -- ./foo.sh arg1 arg2


после `--` scl перестает парсить свои optionы и считает что далее идет команда. впрочем это общепринятая практика и так делают многие "запускалки", не только `scl`
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.