2015-04-10 8 views
0

Трубопровод wsadmin не может запускать скрипты с управлением потоком, потому что в этом режиме новая строка отделяет команды.wsadmin.sh чтение многострочных команд из stdin

Простой пример из http://www-01.ibm.com/support/knowledgecenter/SSEQTP_7.0.0/com.ibm.websphere.base.iseries.doc/info/iseries/ae/cxml_jacl.html?lang=en:

set numbers {1 3 5 7 11 13} 
foreach num $numbers { 
    puts $num 
} 

выход:

[[email protected] ~]$ ${WC_WSADMIN:?} -f test.jacl 
WASX7209I: Connected to process "dmgr" on node EmProdDmgrNode using SOAP connector; The type of process is: DeploymentManager 
1 
3 
5 
7 
11 
13 
[[email protected] ~]$ ${WC_WSADMIN:?} <test.jacl 
WASX7209I: Connected to process "dmgr" on node EmProdDmgrNode using SOAP connector; The type of process is: DeploymentManager 
WASX7029I: For help, enter: "$Help help" 
wsadmin>1 3 5 7 11 13 
wsadmin>WASX7015E: Exception running command: "foreach num $numbers {"; exception information: 
com.ibm.bsf.BSFException: error while eval'ing Jacl expression: 

wsadmin>WASX7015E: Exception running command: "puts $num"; exception information: 
com.ibm.bsf.BSFException: error while eval'ing Jacl expression: 
can't read "num": no such variable 
    while executing 
"puts $num" 
wsadmin>WASX7015E: Exception running command: "}"; exception information: 
com.ibm.bsf.BSFException: error while eval'ing Jacl expression: 
invalid command name "}" 
    while executing 
"}" 

Мой сценарий генерируется. Помимо хранения его во временном файле есть ли обходной путь? Я знаю, что это возможно:

foreach num $numbers { puts $num } 

но что делать, если в блоке должно быть несколько команд?

ответ

0

Используйте точку с запятой:

foreach num $numbers { puts $num; puts $num } 

Но вы, вероятно, лучше писать сценарий к временному файлу.