如何将带有空格的字符串传递给 Java 中的执行命令以执行 bash 脚本?
我正在尝试使用脚本使用 unixmail
命令生成和发送电子邮件,但它忽略了消息字符串周围的引号:
#!/bin/bash
######################################################
#
# Params:
# 1) Email recipient
# 2) Subject line (in quotes)
# 3) Message (in quotes)
#
# Returns:
# 0 if success, else non-zero
#####################################################
MAIL_TO=$1
SUBJECT_LINE=$2
MESSAGE=$3
echo "Mail To= ${MAIL_TO}" >> /logs/terminalLog.txt
echo "Subject= ${SUBJECT_LINE}" >> /logs/terminalLog.txt
echo "Message= ${MESSAGE}" >> /logs/terminalLog.txt
echo "" >> /logs/terminalLog.txt
echo "$MESSAGE" | mail -s "$SUBJECT_LINE" $MAIL_TO >> /logs/terminalLog.txt
这就是我在 java 中的调用方式:
Process proc = Runtime.getRuntime().exec(scriptName+" me@someplace.com \"My Test Subject Line\" \"This is the test message!!\"");
问题是它"My
作为主题参数和Test
消息参数而忽略了其余部分。
我尝试过使用单引号,exec(command, args)
其中
args = {"me@someplace.com","My Test Subject Line","This is the test message!!" }
但仍然有相同的结果。
我在这里和网上搜索过,但大多数人似乎都建议我尝试过什么,虽然它对他们有用,但对我没有用。
更新
关于一些评论/答案的建议,我已从使用更改exec
为
ProcessBuilder pb = new ProcessBuilder(scriptName, "me@somePlace.com","My Test Subject Line", "This is the test message!!");
pb.start();
我现在成功地获得了正确的参数,如日志输出所示,但我从未收到电子邮件。如果我通过终端手动调用脚本,我会收到电子邮件