db2命令行处理器&密码包含' $'

时间:2016-11-29 17:34:32

标签: linux bash db2

当密码包含$字符时,我们发现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的某些组合的受害者,以某种意想不到的方式消耗$。关于如何让它运行的任何想法?

1 个答案:

答案 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'"