2015-04-27 2 views
0

Im пытается запустить вызов скрипта Interface.sh, где цикл for принимает значения из файла и запускает его через серию команд sql, используя документ здесь.sql in for loop не работает

Файл (так называемый InterfaceSymbols.ASIA) содержит 3 строки текста.

Ниже приведено то, что у меня есть.

rsh $MACHINE 
cd /srg/data/Interface 
for line in `cat /srg/data/Interface/InterfaceSymbols.ASIA` 
    do 
    sql <<EOF 
    select s.symbol, i.inventory 
    from 
    symbol s, 
    inventory i, 
    portfolio_inventory pi 
    WHERE 
    s.portfolio = pi.portfolio AND 
    pi.inventory = i.inventory 
    and s.symbol = "$line"; 
    exit 
EOF 
done 

Когда я запускаю сценарий оболочки, он не работает, как я ожидаю.

он тогда rsh переходит к $ MACHINE, а затем ничего не делает. когда я выхожу из машины, он возвращает:

Inter.sh: line 16: sql: command not found 
Inter.sh: line 16: sql: command not found 
Inter.sh: line 16: sql: command not found 

Что я делаю неправильно? Я вижу, что он пытается запустить его три раза (что эквивалентно количеству значений в файле).

+0

Он не распознает команду SQL, попробуйте дать ему полный путь – OTTA

+0

Ok, который работал, но теперь я получаю: 'Введите имя-пользователя: SP2-0306: Invalid option.' ' Использование: CONN [ ECT] [{вход |/| прокси} [AS {SYSDBA | SYSOPER | SYSASM}] [издание = значение]] '' где :: = [/ ] [@] :: = [] [/ ] [@] ' ' Введите имя пользователя: Введите пароль: ' ' ОШИБКА: ' ' ORA-12545: соединение не выполнено, потому что целевой хост или объект не существует' Как мне пройти регистрацию и пароль? – nrs90

+0

Теперь он знает, какой sql вам нужно будет сообщить, с каким db он подключается и снабжает его идентификатором пользователя и паролем. Другими словами, вам нужно проверить синтаксис вашего вызова на sql. – OTTA

ответ

0

Ну, это похоже, что у вас нет sql в пути на вашем удаленном компьютере. Это вероятно потому rsh, в своем стремлении быть безопасными, ограничивает путь к чему-то вроде:

/usr/bin:/usr/sbin 

Вы можете подтвердить это с помощью следующей команды:

rsh otherbox -l username "/usr/bin/echo \$PATH" 

простого решения проблемы, вероятно, чтобы дать полную спецификацию файла для sql, а не полагаться на ее поиск по вашему пути.

В качестве альтернативы, вы можете использовать что-то вроде:

rsh otherbox -l username ". .profile && sql something or other" 

на источник профиля (и, мы надеемся создать более полный путь) перед выполнением команды.