当密码包含$字符时,我们发现DB2 CLP出现故障。我已将命令解压缩到一个简单的bash脚本中:
su - db2apm -c "db2 -v attach to APM_NODE user db2apm using 'apm$2016'"
IBM文档建议引用特殊字符应该有效:
http://www-01.ibm.com/support/docview.wss?uid=swg21303153
但是当我运行这个命令时:
[root@picard ~]# ./test.sh
+ su - db2apm -c 'db2 -v attach to APM_NODE user db2apm using '\''apm016'\'''
attach to APM_NODE user db2apm using
SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR
PASSWORD INVALID"). SQLSTATE=08001
正如您所看到的,' $ 2'被解释为没有值的脚本变量。对此的一种变体,将整个命令用单引号括起来:
su - db2apm -c 'db2 -v attach to APM_NODE user db2apm using apm$2016'
看起来应该可行,但不是:
[root@picard ~]# ./test.sh
+ su - db2apm -c 'db2 -v attach to APM_NODE user db2apm using apm$2016'
attach to APM_NODE user db2apm using
SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR
PASSWORD INVALID"). SQLSTATE=08001
如果我手动运行该命令,它也会失败:
[root@picard ~]# su - db2apm -c 'db2 -v attach to APM_NODE user db2apm using apm$2016'
attach to APM_NODE user db2apm using
SQL30082N Security processing failed with reason "24" ("USERNAME AND/OR
PASSWORD INVALID"). SQLSTATE=08001
但如果我分开它,它就可以了!
[root@picard ~]# su - db2apm
Last login: Tue Nov 29 11:17:56 EST 2016 on pts/3
[db2apm@picard ~]$ db2 -v 'attach to APM_NODE user db2apm using apm$2016'
attach to APM_NODE user db2apm using
Instance Attachment Information
Instance server = DB2/LINUXX8664 10.5.6
Authorization ID = DB2APM
Local instance alias = APM_NODE
这感觉就像我是bash,su和DB2 CLP的某些组合的受害者,以某种意想不到的方式消耗$。关于如何让它运行的任何想法?
答案 0 :(得分:0)
如果你只是逃避美元符号,它应该可以工作(当我刚尝试时,它在我的系统上完成):
su - db2apm -c "db2 -v attach to APM_NODE user db2apm using 'apm\$2016'"
您也可以尝试使用自己的脚本:
test.sh:
db2 -v attach to APM_NODE user db2apm using \''apm$2016'\'
(我不确定引号是否需要转义,如果没有,您可以尝试以下操作:)
db2 -v attach to APM_NODE user db2apm using 'apm$2016'
然后运行:
su - db2apm test.sh
(注意没有-c
)
希望这能解决你的问题!
编辑:此外,如果这仍然没有帮助,您可以尝试通过在db2调用前放置echo
来调试它,以便您可以看到正在扩展的内容以及如何:
su - db2apm -c "echo db2 -v attach to APM_NODE user db2apm using 'apm\$2016'"