
Мне нужно вызвать 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 и пользовательской переменной среды в моем случае?
решение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