Jacl - 选项说明符中变量使用的正确语法是什么

时间:2014-05-06 17:58:15

标签: websphere websphere-8 wsadmin jacl

尝试在Jacl脚本中运行以下命令(在此调用之前设置了$ APPNAME):

$AdminApp install $EARFILE {-nopreCompileJSPs -distributeApp -nouseMetaDataFromBinary -nodeployejb -verbose -appname $APPNAME -createMBeansForResources -noreloadEnabled ...}

我收到以下错误。

WASX7017E: Exception received while running file "deploy_myk.jacl"; exception information: com.ibm.ws.scripting.ScriptingException: WASX7108E: Invalid data specified for install task: "AppDeploymentOptions."  
Errors are: 
"ADMA0085E: A validation error occurred in task Specifying application options. Application name, $APPNAME, is not valid.
 An application name cannot begin with a dot, cannot have leading or trailing spaces, cannot contain "]]>", and cannot contain any of the following characters:  \ / , # $ @ : ; " * ? < > | = + & % '"

我似乎无法找到有关在'option'说明符字符串中使用脚本变量的文档。显然必须有一些方法可以做我正在尝试做的事情,即在脚本运行时部署一个EAR文件,其名称是我选择的

2 个答案:

答案 0 :(得分:1)

Jacl / Tcl是一种基于字符串的语言,{}分隔符可防止变量插值,类似于UNIX shell编程中的''。你想要这样的东西:

$AdminApp install $EARFILE "-nopreCompileJSPs -distributeApp -nouseMetaDataFromBinary -nodeployejb -verbose -appname $APPNAME -createMBeansForResources -noreloadEnabled ..."

...或:

$AdminApp install $EARFILE [list -nopreCompileJSPs -distributeApp -nouseMetaDataFromBinary -nodeployejb -verbose -appname $APPNAME -createMBeansForResources -noreloadEnabled ...]

Tcl tutorial可能会引起人们的兴趣,特别是&#34;评估&amp;替换&#34;部分。

或者,您可以通过切换到-lang jython来避免Jacl字符串的复杂性。

答案 1 :(得分:0)

您使用的变量必须在使用前设置。由于您没有包含任何有关您实际执行此操作的详细信息,因此我认为这是缺少的。在您的脚本中,您应该可以从以下内容开始:

# Set $APPNAME to be the first argument to this script.
set APPNAME [lindex $argv 0]

然后从那里开始。然后,您可以使用您的应用程序名称作为第一个参数运行您的jacl脚本。