尝试从数据库表sysibm.sysversions中获取2个字符的版本。这是独立工作的:
db2 -x "select versionnumber from sysibm.sysversions where UPPER(authid) = UPPER('db2dev')" | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//' | head -c2
这给出了结果:
11
尝试将其合并到脚本中会产生奇怪的结果
db2 connect to sample
_dbversion=$(db2 -x "select versionnumber from sysibm.sysversions where UPPER(authid) = UPPER('${_dbuser}')" | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//')
echo -e "${_dbversion}"
这会产生连接错误
SQL1024N数据库连接不存在。 SQLSTATE = 08003
我可以通过在select
之外执行grep来解决这个问题db2 connect to sample
_dbversion=$(db2 -x "select versionnumber from sysibm.sysversions where UPPER(authid) = UPPER('${_dbuser}')")
_dbversion_head=$(echo -e ${_dbversion1} | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//' | head -c2)
echo -e "${_dbversion_head}"
或在括号内连接
_dbversion=$(db2 -x connect to sample; db2 -x "select versionnumber from sysibm.sysversions where UPPER(authid) = UPPER('${_dbuser}')" | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//' | head -c2)
使用grep / sed时是否可以扩展连接范围?
答案 0 :(得分:0)
还有另外两种获取版本号的方法:
db2pd -v
db2level
- 请参阅此处https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.admin.trb.doc/doc/c0020806.html 我建议使用它,因为它们的资源更轻。
答案 1 :(得分:0)
管道导致db2 -x "select..."
在子shell中执行,而连接仍然是父shell的本地连接。
您可以简单地将connect
和select
放入文件(甚至是here-document)中以将其作为脚本运行,从而保证两者都在同一会话中执行:
db2 -x <<EOF | sed -e ...
connect to yourdb
select versionnumber ...
EOF