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

Вызов приложения с помощью 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_SIDenv var и подключается к базе данных по умолчанию. Также я не могу исключить -iопцию sudo, потому что мне нужно быть уверенным, что все остальные переменные окружения инициализированы идеально.

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

решение1

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

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.

решение2

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

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

Связанный контент