com base nos comentários de Eric Renouf sobre a iteração anterior desta resposta sobre como nohup
e bash
conspiram para impedir espaços de escape
user="Tim Toms"
jarfile=./app.jar
SC_CD="java -jar -Xms512m -Xmx2048m -DUSER='$user' $jarfile"
echo $SC_CD > temp.sh
nohup bash temp.sh
Se o objetivo era permitir que o java fosse executado em segundo plano, eu poderia ter feito algo parecido com
echo java -jar -Xms512m -Xmx2048m -DUSER=\'$user\' $jarfile | at now
e esquecido de nohup
(e daí, se houver algum e-mail de lixo para limpar)
==== resposta antiga abaixo, apenas para que os comentários façam sentido. Esqueça abaixo caso contrário ====
Embora pareça que suas declarações realmente chamam nohup
com "Tim Tom" entre aspas simples, talvez nohup
faça sua chamada system()
com uma string simples em vez de fazer uma chamada exec
e fazer a string perde as aspas.
Acabei de testar colocando um echo
na frente do nohup
Eu não estou realmente em condições de testá-lo, mas sugiro que você faça sua primeira linha em
user='"Tim Tom"'
como aspas simples devem impedir a expansão e devem passar aspas duplas para nohup
Estou baseando isso em fazer um script de teste como
ser="Tim Tom";
jarfile=./app.jar
SC_CD="java -jar -Xms512m -Xmx2048m -DUSER='$user' $jarfile"
echo nohup $SC_CD
quando eu sh -x test.sh
obtenho
+ 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
Mas, fazendo a alteração sugerida, dá
+ 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
Note que, em ambos os casos, o echo mostra que nohup deve obter pelo menos o primeiro nível de aspas em seus argumentos. É por isso que estou sugerindo adicionar um nível adicional