nohup中如何传递带空格的参数?

nohup中如何传递带空格的参数?

我有运行 jar 的脚本,如下所示。

user="Tim Tom";
jarfile=./app.jar
SC_CD="java -jar -Xms512m -Xmx2048m -DUSER='$user' $jarfile"
nohup $SC_CD

我收到错误消息为

Error: Unable to access jarfile Tom

所以,我的理解是,它是以空格后面的单词作为jar名称。

因此,我的问题是, 如何传递带空格的参数?

答案1

基于埃里克·雷诺夫(Eric Renouf)对此答案先前迭代的评论,内容涉及如何nohupbash密谋阻止逃逸空间

user="Tim Toms"
jarfile=./app.jar
SC_CD="java -jar -Xms512m -Xmx2048m -DUSER='$user' $jarfile"
echo $SC_CD  > temp.sh
nohup bash temp.sh

如果重点是让 java 在后台运行,我可能会做类似的事情

echo java -jar -Xms512m -Xmx2048m -DUSER=\'$user\' $jarfile | at now

并被遗忘nohup (如果有一些垃圾邮件需要清理又如何)

====下面是旧答案,这样评论才有意义。否则忘记下面====

虽然看起来你的语句实际上确实nohup用单引号中的“Tim Tom”进行了调用,但也许nohupsystem()用一个简单的字符串进行调用而不是进行调用exec,并使字符串丢失引号。

我刚刚通过echo在前面放一个来进行测试nohup

我真的无法测试它,但我建议尝试将你的第一行变成

user='"Tim Tom"'

因为单引号应该防止扩展并且应该将双引号传递给nohup

我的基础是制作一个测试脚本,例如

ser="Tim Tom";
jarfile=./app.jar
SC_CD="java -jar -Xms512m -Xmx2048m -DUSER='$user' $jarfile"
echo nohup $SC_CD

然后当我sh -x test.sh得到

+ user='Tim Tom'
+ jarfile=./app.jar
+ SC_CD='java -jar -Xms512m -Xmx2048m -DUSER='\''Tim Tom'\'' ./app.jar'
+ echo nohup java -jar -Xms512m -Xmx2048m '-DUSER='\''Tim' 'Tom'\''' ./app.jar
nohup java -jar -Xms512m -Xmx2048m -DUSER='Tim Tom' ./app.jar

但是进行建议的更改会给出

+ user='"Tim Tom"'
+ jarfile=./app.jar
+ SC_CD='java -jar -Xms512m -Xmx2048m -DUSER='\''"Tim Tom"'\'' ./app.jar'
+ echo nohup java -jar -Xms512m -Xmx2048m '-DUSER='\''"Tim' 'Tom"'\''' ./app.jar
nohup java -jar -Xms512m -Xmx2048m -DUSER='"Tim Tom"' ./app.jar

请注意,在这两种情况下,echo 显示 nohup 应该在其参数中至少获得第一级引号。这就是为什么我建议添加一个额外的级别

相关内容