使用“客户端”二进制文件在脚本模式下更改捆绑包的 ServiceMix 配置

ServiceMix config change for a bundle in scripting mode using `client` binary

我有一个 ServiceMix 5.1.4 实例 (localhost),我想用提供的客户端 (smx_home/bin/client) 编写一些 属性 更改脚本。

如果我在 smx 控制台中手动测试我的命令(不使用 client

config:edit org.myspace.test.mybundle
config:propset propertyOne false
config:propset propertyTwo true
config:update

...效果很好。

现在我想从 bash 执行这些命令,然后我写了一个简单的 bash 像这样:

#!/bin/bash

smxcli='/opt/mysmxdir/bin/client'

$smxcli -h localhost -a 8101 -u smx -p smx config:edit org.myspace.test.mybundle
$smxcli -h localhost -a 8101 -u smx -p smx config:propset propertyOne false
$smxcli -h localhost -a 8101 -u smx -p smx config:propset propertyTwo true
$smxcli -h localhost -a 8101 -u smx -p smx config:update

或者如果我尝试在命令行中使用客户端本身,它会在第二行失败,因为它不会跟踪第一个 edit 命令。

No configuration is being edited--run the edit command first

我试着像列表一样提供命令:

./client -h localhost -a 8101 -u smx -p smx  "config:edit org.myspace.test.mybundle" "config:propset propertyOne true" "config:propset propertyTwo false" "config:update"

并使用选项 -b(批处理)

./client -h localhost -a 8101 -u smx -p smx  -b "config:edit org.myspace.test.mybundle" "config:propset propertyOne true" "config:propset propertyTwo false" "config:update"

但它不起作用。

我知道我可以使用选项 -f(将所有 smx 命令写入一个文件并使用 client -f myfile.cmd 执行它们)但我想知道是否可以从单个 bash 脚本中不使用额外的文件。

事实上,解决方案非常简单:就像在 unix/linux 中一样,您可以在同一命令字符串中用分号 ; 分隔命令。

示例:

./client -h localhost -a 8101 -u smx -p smx  "config:edit org.myspace.test.mybundle; config:propset propertyOne true; config:propset propertyTwo false; config:update"

我发现也可以一次发送多个包的所有命令。如果我尝试发送两个不同的命令,为了更改两个不同包的属性,第二个命令不起作用。

在那种情况下,解决方案是仅使用一个命令连接所有更改,如下所示:

./client -h localhost -a 8101 -u smx -p smx  "config:edit org.myspace.test.bundle-1; config:propset propertyOne true; config:propset propertyTwo false; config:update; config:edit org.myspace.test.bundle-2; config:propset propertyX true; config:propset propertyY false; config:update"