我想使用似乎很简单的camel-exec组件创建一个执行gzip命令的camel路由。但是,我需要压缩输入文件而不修改原始文件,压缩文件应该移动到另一个输出目录。
我用谷歌搜索并发现它可以通过linux中的以下命令之一来实现:
gzip -c test_input_file.dat > /home/prem/myappdir/output/test_output.gz
或
gzip < test_input_file.dat > /home/prem/myappdir/output/test_output.gz
或
cat test_input_file.dat | gzip /home/prem/myappdir/output/test_output.gz
或
gzip -c test_input_file.dat | cat > /home/prem/myappdir/output/test_output.gz
以上所有命令在linux终端都运行正常。当我在驼峰路线中使用这些命令时,它们都没有工作。
我正在使用&#39; gzip&#39;因为命令和其余内容作为命令参数传递给camel路由中的Exec组件。
执行gzip任务的我的Camel路由是:
<!-- route to demonstrate camel-exec -->
<route id="camelExecDemo">
<from uri="timer://kickoff?repeatCount=1"/>
<to uri="exec:gzip?args=-c /home/prem/Documents/input/test_input_file.dat > /home/prem/myappdir/output/test_output.gz&useStderrOnEmptyStdout=true"/>
<log message="${body}"/>
</route>
有人请帮忙!我坚持这个问题。
注意:只有一个输入文件作为参数的简单gzip命令在我的路由中正常工作。但是,我需要像上面提到的那样去做。
系统详情:
Linux:RHEL(或Linux Mint 17)
骆驼版本:2.11.0
答案 0 :(得分:2)
最后我明白了。我认为创建用于执行这些命令的shell脚本是执行此任务的唯一方法。后来,我发现它可以通过&#39; sh&#39;命令(shell)和-c选项,它从命令字符串中获取输入,并像shell脚本一样执行它们。
以下linux命令将执行gzip而不修改原始输入文件,并将压缩输出文件移动到另一个输出目录:
sh -c "gzip -c test_input_file.dat > /home/prem/myappdir/output/test_output.gz"
我的骆驼路线更新如下:
<route id="camelExecDemo">
<from uri="timer://kickoff?repeatCount=1"/>
<to uri="exec:sh?args=-c "gzip -c /home/prem/Documents/input/test_input_file.dat > /home/prem/myappdir/output/test_output.gz" &useStderrOnEmptyStdout=true"/>
<log message="${body}"/>
</route>
同样可以在shell命令的帮助下顺序执行多个linux命令,然后可以在camel-exec组件中使用它。
感谢博客文章,我提取了这个想法:
http://zhanghaoblog.blogspot.in/2015/01/camel-exec-multiple-commdans-scripts.html