Информация об изменениях

Сообщение Re[3]: Вызов "себя" из скрипта от 26.05.2015 9:55

Изменено 26.05.2015 10:00 v_andal

Здравствуйте, 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.
Re[3]: Вызов "себя" из скрипта
Здравствуйте, 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 уже предложили решение