2016-11-29 3 views
1

Мы видим сбой в DB2 CLP, когда пароль содержит символ $. Я извлек команду в простой Баш скрипт:

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 

Это чувство, что я стал жертвой какой-то комбинации Баша, су и DB2 CLP потребляя $ в каком-то неожиданном образе. Любые мысли о том, как заставить это работать?

+0

в одиночные тики убираются на пути от su до db2, поэтому к тому времени, когда 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)

Надеется, что это решает проблему!

Edit: Кроме того, если это все равно не поможет, вы можете попробовать ее отладки, помещая 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

Не знаю, почему это Didn 't правильно ... – cbarlock

Смежные вопросы