进入sqlplus/dgmgrl命令行后无法暂停bash脚本关闭的问题求助
问题根因
- 你将
$SHELL写在了dgmgrl的专属输入块(<< END和END包裹的内容)中,这部分内容会全部传给dgmgrl进程解析,dgmgrl无法识别shell命令,执行到块内的exit指令就会直接退出dgmgrl程序,后续shell层逻辑不会生效,ssh会话直接终止导致窗口关闭。 - 脚本首行存在笔误,
entdexport应为export。 - 调用putty时没有分配交互式伪终端,即便后续启动shell也无法正常进入交互状态,窗口仍会自动关闭。
修复方案
1. 修改putty调用命令,添加-t参数
强制分配伪终端支持交互式操作:
putty.exe -ssh servername -t -l username -pw password -m C:/automation/dgmgrl.sh
注:你原路径中的auotomation是拼写错误,建议修正为automation避免找不到文件
2. 修正dgmgrl.sh脚本内容
将$SHELL移到dgmgrl输入块外,调整后完整代码如下:
export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/12.1.0/NonValidated export ORACLE_HOSTNAME=servername export ORACLE_SID=ERIPRD export PATH=/u01/app/oracle/product/12.1.0/NonValidated/bin:/usr/sbin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oracle/bin # 执行dgmgrl命令 dgmgrl -echo << END connect /; show configuration; show database ERIPRD; exit; END # 命令执行完成后停留在shell交互界面,窗口不会自动关闭 $SHELL
可选配置
如果不需要后续交互,仅需要保留窗口查看执行结果,可以把末尾的$SHELL替换为以下内容,按下任意键后窗口才会关闭:
read -n 1 -p "执行完成,按任意键关闭窗口..."
如果需要留存执行日志,直接在dgmgrl命令行末尾加重定向即可:
dgmgrl -echo << END >> /var/log/dgmgrl_run.log 2>&1 connect /; show configuration; show database ERIPRD; exit; END
内容的提问来源于stack exchange,提问作者aadi sharma
相关产品推荐
相关产品推荐

