Назад | Перейти на главную страницу

Вызов приложения с помощью sudo и настраиваемой переменной среды

Мне нужно позвонить sqlplus с пользователем oracle sudo для четко указанной БД (env var ORACLE_SID) с помощью однострочной команды. Обычный способ сделать это состоит из 2 шагов:

$ sudo -u oracle -i
$ ORACLE_SID=DBNAME sqlplus / as sysdba

Но мне нужно сделать это одной строкой (разумно для экономии времени). Я стараюсь сделать это просто так:

$ sudo -u oracle -i ORACLE_SID=DBNAME sqlplus / as sysdba

Но кажется что sqlplus не видит изменения ORACLE_SID env var и подключается к БД по умолчанию. Также не могу исключить -i sudo, потому что мне нужно быть уверенным, что все остальные переменные среды инициализированы идеально.

Как в моем случае запустить приложение с sudo и пользовательской переменной окружения?

Попробуйте следующую команду:

sudo -i su - oracle -c 'ORACLE_SID=DBNAME && sqlplus'

Пояснение:

"sudo -i" will take care of the environment variables.
"su - user" will consider the user's environment variables
"-c" -> the command you wish to issue.

Лучший способ решить вопрос - использовать следующую команду:

sudo -u oracle -i sh -c "ORACLE_SID=DBNAME sqlplus / as sysdba"

И если мы хотим передать sql-скрипт прямо в одну строку:

sudo -u oracle -i sh -c "ORACLE_SID=DBNAME sqlplus / as sysdba" <<-EOF
  SELECT 1 FROM DUAL;
EOF