1

Я пытаюсь установить переменные среды, пока я SSH на удаленный сервер на сервере CentOS. Я запускаю команду от имени пользователя root, но она нужна для запуска команды от имени пользователя Oracle. Я нашел несколько вещей на сайте, но ни одна из них не работает.

ssh $SERVER su $ORACLE_USER 'ORACLE_HOME="/u01/app/oracle/product/11.2.0"; PATH="/u01/app/oracle/product/11.2.0/Opatch:$PATH';  opatch lsiinventory'

Кто-нибудь может мне помочь?

2 ответа2

4

В большинстве оболочек переменные не являются автоматически частью среды, пока они не экспортируются туда (в терминологии оболочки Bourne). Для sh/bash используйте:

ssh $SERVER "su $ORACLE_USER -c 'export ORACLE_HOME=\"/u01/app/oracle/product/11.2.0\";
                                 export PATH=\"/u01/app/oracle/product/11.2.0/Opatch:\$PATH\";
                                 opatch lsiinventory'"

(В bash изменение существующей переменной среды, такой как $ PATH, автоматически реэкспортирует ее, но это не гарантируется для всех оболочек.)

Также обратите внимание, что ssh не сохраняет разделение аргументов и отправляет все как один параметр (который в конечном итоге передается /bin/sh -c "…"). Чтобы избежать путаницы, лучше всего сначала передать ssh только один параметр команды.

0

Почему бы просто не создать небольшую панель запуска сценариев в удаленной системе и запустить ее:

#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/11.2.0
exec $ORACLE_HOME/Opatch/opatch lsiinventory

Сохраните это в файл, который называется что-то вроде "oplauncher" chmod 755, и используйте ssh для входа и запуска.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .