Du har ikke sagt, hvad der rent faktisk sker, men jeg gætter på, at du ikke bliver bedt om legitimationsoplysningerne, og at den måske ikke kan finde sqlplus
. På en Red Hat-boks virker dette:
#!/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
Dette indsamler værdierne fra brugeren på den lokale maskine for at undgå 'Pseudo-terminalen vil ikke blive allokeret, fordi stdin ikke er et terminal'-problem.
Det er derefter at konfigurere Oracle-miljøet én gang på fjernserveren - hvad du skal indstille afhænger af, hvilken klient du bruger (især om du bruger instant-klienten, men hvis du opretter forbindelse som oracle det virker usandsynligt, og du kan sikkert køre
oraenv
).
Jeg har også tilpasset det til at køre SQL*Plus med /nolog
og derefter tilslut
når den kører, så legitimationsoplysningerne ikke vises i ps
produktion. Og jeg har skiftet fra de gamle faner
til de mere almindelige brugertabeller
.
De indlejrede heredocs virker, men er ikke nødvendige; SQL-kommandoerne bliver allerede indtastet på det rigtige sted og vil blive set af SQL*Plus i stedet for fjernskallen.
Selvfølgelig, da jeg ikke ved, hvilken fejl du rent faktisk så, er dette i høj grad spekulation. Det ville nok være nemmere at have klienten installeret lokalt og bruge en SQL*Net-forbindelse frem for SSH, men der kan være firewall-restriktioner, som vi ikke kender til.