问题描述
var=$(sqlplus -s username/pwd$@SID <<EOF
set heading on
set trimspool off
set linesize 200
set Feedback off
SET MARKUP HTML ON
spool output.htmL
SELECT * FROM V$SESSION where username='FSUSER' and PROGRAM='sql Developer' and OSUSER NOT IN ('username');
spool off;
exit;
EOF)
echo "$var" > output.txt
exit 0
但输出文件显示为 ORA 错误,手动连接在同一台服务器上正常工作,没有任何问题。
错误:ORA-12162:TNS:net 服务名称指定不正确
SP2-0306:无效选项。用法:CONN[ECT] [{logon|/|proxy} [AS]
{SYSDBA|SYSOPER|SYSASM|SYSBACKUP|SYSDG|SYSKM}] [edition=value]] 其中
::= [/][@
感谢这里的任何帮助
解决方法
对于此处的文档(构造 <<EOF ... EOF
),结束标记应该是该行中唯一的字符。因此替换
EOF)
与
EOF
)
您的代码有另一个问题:$
中的 V$SESSION
被评估/解析,导致错误。使用反斜杠 V\$SESSION
或在开始标记 EOF 周围加上引号可以避免解析:
var=$(sqlplus -S /nolog << 'EOF'
....
EOF
)