2016-11-29 25 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

相關問題