Neřekli jste, co se vlastně stalo, ale předpokládám, že nejste vyzváni k zadání přihlašovacích údajů a že možná nemůže najít sqlplus
. Na krabici Red Hat to funguje:
#!/bin/bash
echo Please enter an Oracle Username:
read USERNAME
echo "Please enter the Oracle Username's Password:"
read -s PASS
SID=XE
conn_str=$USERNAME/[email protected]$SID
ssh [email protected] << EOF
# set these for your specific environment
ORACLE_HOME=<path to ORACLE_HOME>
PATH=$PATH:$ORACLE_HOME/bin # or without .../bin depending on client
TNS_ADMIN=<path to tnsnames.ora directory, if not default>
sqlplus -s /nolog
connect $conn_str
select * FROM user_tables;
exit
EOF
Toto je shromažďování hodnot od uživatele na místním počítači, aby se předešlo problému 'Pseudoterminál nebude přidělen, protože stdin není terminál'.
Poté jednou na vzdáleném serveru nastaví prostředí Oracle – to, co musíte nastavit, závisí na tom, kterého klienta používáte (zejména zda používáte okamžitého klienta, i když pokud se připojujete jako oracle
to se zdá nepravděpodobné a pravděpodobně můžete spustit oraenv
).
Také jsem to vylepšil tak, aby spouštěl SQL*Plus s /nolog
a poté connect
po spuštění, takže přihlašovací údaje nejsou v ps
vystaveny výstup. A přešel jsem ze starých tabs
na běžnější user_tables
.
Vnořené heredocs fungují, ale nejsou nutné; příkazy SQL se již zadávají na správném místě a budou je vidět spíše SQL*Plus než vzdálený shell.
Samozřejmě, protože nevím, jakou chybu jste ve skutečnosti viděli, je to z velké části spekulace. Pravděpodobně by bylo jednodušší nechat klienta nainstalovat lokálně a používat připojení SQL*Net místo SSH, ale mohou existovat omezení brány firewall, o kterých nevíme.