आपने यह नहीं बताया कि वास्तव में क्या होता है, लेकिन मुझे लगता है कि आपको क्रेडेंशियल के लिए संकेत नहीं दिया गया है, और शायद यह sqlplus नहीं ढूंढ सकता है . Red Hat बॉक्स पर यह काम करता है:
#!/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/example@sqldat.com$SID
ssh example@sqldat.com << 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
यह स्थानीय मशीन पर उपयोगकर्ता से मूल्यों को एकत्र कर रहा है ताकि 'छद्म-टर्मिनल आवंटित नहीं किया जाएगा क्योंकि स्टड एक टर्मिनल नहीं है' समस्या से बचने के लिए।
यह तब दूरस्थ सर्वर पर एक बार Oracle वातावरण स्थापित कर रहा है - आपको जो सेट करने की आवश्यकता है वह इस बात पर निर्भर करता है कि आप किस क्लाइंट का उपयोग कर रहे हैं (विशेषकर चाहे आप तत्काल क्लाइंट का उपयोग कर रहे हों, हालांकि यदि आप oracle<के रूप में कनेक्ट हो रहे हैं) /कोड> यह असंभव लगता है, और आप शायद oraenv run चला सकते हैं )।
मैंने इसे /nolog . के साथ SQL*Plus चलाने के लिए भी ट्वीक किया है और फिर कनेक्ट करें एक बार चलने के बाद, ताकि क्रेडेंशियल ps . में उजागर न हों आउटपुट और मैंने पुराने टैब से स्विच कर लिया है अधिक सामान्य user_tables . के लिए ।
नेस्टेड हेरेडोक्स काम करते हैं लेकिन आवश्यक नहीं हैं; SQL कमांड पहले से ही सही जगह पर दर्ज किए जा रहे हैं और दूरस्थ शेल के बजाय SQL*Plus द्वारा देखे जाएंगे।
बेशक, चूंकि मुझे नहीं पता कि आप वास्तव में कौन सी त्रुटि देख रहे थे, यह काफी हद तक अटकलें हैं। क्लाइंट को स्थानीय रूप से स्थापित करना और SSH के बजाय SQL*Net कनेक्शन का उपयोग करना शायद आसान होगा, लेकिन फ़ायरवॉल प्रतिबंध हो सकते हैं जिनके बारे में हम नहीं जानते हैं।