我有运行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名称。
因此,我的问题是,如何传递带有空间的参数?
基于埃里克·雷诺夫(Eric Renouf)关于此答案先前迭代的评论,内容涉及如何nohup
并bash
密谋挫败逃逸的空间
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”nohup
的system()
调用,但它的调用可能是使用简单的字符串而不是进行了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应该至少在其参数中获得第一级引号。这就是为什么我建议添加一个附加级别
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句