2016-11-29 24 views
1

当密码包含$字符时,我们看到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的某种组合的牺牲品,它以某种意想不到的方式消耗$。任何想法如何让这个运行?

+0

的在从su到db2的过程中,单个ticks会被剥离,所以到db2看到一个纯粹的$ 2016可以扩展(到没有);逃避'$' –

回答

0

如果你躲开美元符号,它应该工作(这在我的系统上,当我刚刚试了一下):

su - db2apm -c "db2 -v attach to APM_NODE user db2apm using 'apm\$2016'" 

你也可以尝试把到它自己的脚本:

测试.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'" 
+1

谢谢!正如你所说,逃离美元符号的作品。我发现,这也适用: '设置-x db2apm_pw = '$ APM到2016年' 苏 - db2apm -c “DB2 -v附加使用APM_NODE用户db2apm '$ {} db2apm_pw' 到”' – cbarlock

+0

不知道为什么这没格式正确... – cbarlock

相关问题