Como passar um parâmetro com espaço no nohup? [duplicado]

1

Eu tenho um script para executar um jar, como mostrado abaixo.

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

E estou enviando uma mensagem de erro como

Error: Unable to access jarfile Tom

Então, meu entendimento é que está tomando a palavra depois do espaço como nome jar.

Portanto, minha pergunta é: Como passar o parâmetro com espaço?

    
por anij 05.05.2016 / 13:55

1 resposta

1

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

    
por 05.05.2016 / 16:14