使用“客户端”二进制文件在脚本模式下更改捆绑包的 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"
我有一个 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"