IBM i:SSH远程执行/QOpenSys/usr/bin/db2命令返回空白但操作生效求助
IBM i 7.3/7.4 SSH远程执行
db2软链接无输出但操作生效的问题分析 核心场景
通过ln -s /QOpenSys/usr/bin/qsh /QOpenSys/usr/bin/db2创建软链接后:
- 本地交互式执行
db2命令(如查询、建表)正常返回输出 - SSH远程执行时,命令实际生效(建表、CRUD操作均完成),但无任何输出;
ssh -v确认命令执行成功
问题原因
QSH非交互式模式的输出抑制
SSH远程执行单条命令属于非交互式会话,QSH在非交互式模式下默认会调整输出策略——相比本地交互式会话,它不会主动将DB2命令的结果输出到标准输出流,仅保证命令逻辑执行。终端环境变量不匹配
本地交互式会话的TERM变量(通常为IBM3270或xterm)会触发QSH的正常输出逻辑;但远程SSH会话默认的TERM值可能为空或不兼容,导致QSH无法正确识别输出终端,进而抑制输出。IBM i 7.3/7.4的版本特定行为
这两个版本的QSH对非交互式执行的输出处理做了调整,更早版本的兼容逻辑被修改,导致软链接方式的远程调用无法输出结果。
可行解决方案
直接指定QSH执行命令
跳过软链接,远程执行时直接调用qsh并传入DB2命令:ssh user@ibmi-host 'qsh -c "db2 \"select * from mytable\""'替换软链接为脚本
创建/QOpenSys/usr/bin/db2脚本代替软链接,内容如下:#!/QOpenSys/usr/bin/bash qsh -i -c "db2 $*"赋予执行权限:
chmod +x /QOpenSys/usr/bin/db2其中
-i参数强制QSH以交互式模式运行,确保输出正常流向标准输出。显式设置远程会话的
TERM变量
远程执行时指定兼容的终端类型,强制QSH输出结果:ssh user@ibmi-host 'TERM=xterm db2 "select * from mytable"'
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

