今天我试图用一个groovy脚本替换bash脚本。一切运行顺利,我设法使用execute()
命令来调用其他命令。
然后我试图发送一封带有主题的电子邮件:
mail -s "this is a test" my.mail@example.com < mail.tmp
变成了
'mail -s "this is a test" my.mail@example.com < mail.tmp'.execute()
不起作用,因为groovy会将一个参数"this is a test"
分成四个参数"this
is
a
test"
。
到目前为止一切顺利。谷歌帮我把它变成了
['mail', '-s', "this is a test", 'my.mail@example.com', '<', 'mail.tmp'].execute()
现在主题被识别为一个参数,但<
也被识别为参数而不是文件重定向。
知道如何解决这个问题吗?
PS:不,我不想使用java代码发送邮件,因为我猜代码会更复杂。但是如果你有一个java one-liner,欢迎你...
答案 0 :(得分:1)
您必须处理将进程的输出写入文件...
new File('mail.tmp').withWriter { it << """mail -s "this is a test" my.mail@example.com""".execute().getText() }
我之前只用“ls -al”作为命令进行了测试,并且按预期工作,我不确定是否需要更长时间的运行过程来调整你的方式 - 如果是这样你可能需要使用waitForProcessOutput:
new File('mail.tmp').withWriter { """mail -s "this is a test" my.mail@example.com""".execute().waitForProcessOutput(it, it) }
答案 1 :(得分:1)
找到另一个对我来说更容易的解决方案,但我想它并不像@chrixian提供的那样干净:
['sh','-c','mail -s "this is a test" my.mail@example.com < mail.tmp'].execute()
此命令创建另一个shell以执行mail命令。这样,'mail -s "this is a test" my.mail@example.com < mail.tmp'
由shell解释,它知道如何正确处理参数和<
符号。
缺点:它适用于* nix系统。对于Windows系统,shell以不同的方式执行。