Мне нужно позвонить 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