ServiceMix配置使用`client`二进制文件在脚本模式下更改捆绑包

时间:2015-09-28 12:45:59

标签: bash client apache-karaf apache-servicemix

我有一个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脚本中执行。

1 个答案:

答案 0 :(得分:0)

实际上解决方案非常简单:就像在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"