当密码包含$字符时,我们在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以某种意想不到的方式消费$的组合的牺牲品。有什么办法能让这一切顺利进行吗?
发布于 2016-11-29 17:50:20
如果你只是逃避了美元符号,它就会起作用(当我刚刚尝试的时候,它在我的系统上起作用了):
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)
希望这能解决你的问题!
编辑:此外,如果这仍然没有帮助,您可以尝试通过在echo调用前面放置一个db2来调试它,这样您就可以看到正在展开的内容以及如何展开:
su - db2apm -c "echo db2 -v attach to APM_NODE user db2apm using 'apm\$2016'"https://stackoverflow.com/questions/40872179
复制相似问题