Вопрос, вроде как, невероятно прост, но я что-то все торможу... Итак, имеется RH5 и приложение scl (бинарная аппликуха принимающая на вход команду shell, которую надо исполнить). Например запустить мой скрипт при помощи scl можно так:
scl enable devtoolset-2 './foo.sh arg1 arg2'
Мне необходимо из скрипта вызвать самого себя через scl при определенных условиях. Как вызвать самого себя вроде очевидно, а вот как вызвать самого себя через промежуточное приложение?
Здравствуйте, 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
и всех делов. Какие здесь возникают грабли? Может нужно уточнить, что подразумевается под "вызвать самого себя"?
Здравствуйте, v_andal, Вы писали:
_>То есть нужно внутри шеловского скрипта запустить этот же скрипт ещё раз? А в каком месте возникает проблема? Вроде бы просто пишешь
_>if <условие>
_> scl enable devtoolset-2 './foo.sh arg1 arg2'
_>fi
Да, именно так как я и пытаюсь сделать. Результат: второй вызов просто не происходит
_>и всех делов. Какие здесь возникают грабли? Может нужно уточнить, что подразумевается под "вызвать самого себя"?
самого себя значит скрипт определили что ему нужно выполняться в другом окружении, а для этого необходимо вызвать scl. Если бы речь шла о консоли, то все выглядело бы так:
scl enable devtoolset-2 'bash'
./foo.sh arg1 arg2 # <- тут у нас уже новая сессия
Здравствуйте, 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
не заработает? Без перезапуска самого себя.
Здравствуйте, RomikT, Вы писали:
RT>А если в начале скрипта написать
RT>RT>source /opt/rh/devtoolset-2/enable
RT>
не заработает? Без перезапуска самого себя.
Оно!!!
Здравствуйте, 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 уже предложили решение
небольшое дополнение чтобы не париться со строками при вызове `scl` (возможно этих строк вложенных и без этого дофига)
scl enable devtoolset-2 -- ./foo.sh arg1 arg2
после `--` scl перестает парсить свои optionы и считает что далее идет команда. впрочем это общепринятая практика и так делают многие "запускалки", не только `scl`