当密码包含$字符时,我们看到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
但是当我运行此命令:
[[email protected] ~]# ./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'
看起来像它应该工作,但不会:
[[email protected] ~]# ./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
如果我手动运行该命令,它也失败:
[[email protected] ~]# 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
但是,如果我分裂它,它的工作原理!
[[email protected] ~]# su - db2apm
Last login: Tue Nov 29 11:17:56 EST 2016 on pts/3
[[email protected] ~]$ 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的某种组合的牺牲品,它以某种意想不到的方式消耗$。任何想法如何让这个运行?
的在从su到db2的过程中,单个ticks会被剥离,所以到db2看到一个纯粹的$ 2016可以扩展(到没有);逃避'$' –