2015-05-13 3 views

ответ

3

После выполнения sudo есть новая оболочка, а остальные «команды» не являются ее частью, а частью родительской оболочки. Вы можете сделать:

sudo -u oracle -i bash -c "cd /lo2/ram/daska && ./script.sh" 

или непосредственно,

sudo -u oracle -i /lo2/ram/daska/script.sh 
+0

. последний в зависимости от того, нужен ли скрипту этот конкретный рабочий каталог или нет ... – glglgl

+0

Да, это действительная точка. –

4

Использования & & сепаратора

sudo -u oracle -i && cd /lo2/ram/daska && ./script.sh 
+1

просто помните, что при использовании '&&', если какая-либо команда в цепочке терпит неудачу, остальное не будет выполнено. – frost

+0

Нет, это не работает. Я пробовал с символом с запятой и символами &&, его выполнение только первой команды ..пожалуйста, еще раз проверьте –

+1

Если все команды успешны, то замена ';' на '&&' не имеет значения. В любом случае, это не проблема и не затрагивает вопрос. –

3

Вы также можете использовать точку с запятой, чтобы отделить вашу команду

sudo -u oracle -i ; cd /lo2/ram/daska ; ./script.sh 

Разница между использованием & & и точки с запятой является то, что если вы хотите выполнить каждую команду только в том случае, если предыдущий eds, то вы можете использовать оператор & &. Однако, если вы хотите выполнять команды, независимо от того, какой из них выполняется или нет, вы можете использовать точку с запятой (;) для разделения команд.

+0

Нет, это не работает. Я пробовал с символом с запятой и символами &&, выполнив только первую команду. Пожалуйста, еще раз проверьте –

+0

@Ramdas: - Вы видели ответ, полученный glglgl 'sudo -u oracle sh -c 'cd/lo2/RAM/Daska; ./script.sh'' –

+0

Да, но профиль оракула не попадает туда, когда я использую указанную выше команду с -i .. я получаю ошибки с ошибкой. Команда sqlplus не найдена. Когда я выполняю команду вручную, ее рабочий штраф –

3

Я просто добавлю к ответам Piperoman и Rahul, что с && более поздняя команда выполняется только в том случае, если первая успешно завершена, и с ; следующая команда всегда выполняется.

Так

sudo -u oracle -i ; cd /lo2/ram/daska ; ./script.sh

, если вы не заботитесь ли все в цепи выполняет, и

sudo -u oracle -i && cd /lo2/ram/daska && ./script.sh

если вы делаете.

3

Если вы

sudo -u oracle -i ; cd /lo2/ram/daska; ./script.sh 

вы сказать, что Войти оболочка работает под пользователем oracle должен быть запущен. Это происходит, и другие команды выполняются после того, как вы покинете эту оболочку.

Возможно, это не то, что вы хотите.

Я вижу следующий вариант:

sudo -u oracle sh -c 'cd /lo2/ram/daska; ./script.sh' 

, который в принципе упоминается в справочной странице SUDO в.

Смежные вопросы