아래와 같이 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
그래서 제가 이해한 바에 따르면 공백 뒤의 단어를 항아리 이름으로 사용한다는 것입니다.
그래서 내 질문은, 공백이 포함된 매개변수를 전달하는 방법은 무엇입니까?
답변1
탈출 공간을 차단하는 방법 nohup
과 계획에 대한 이 답변의 이전 반복에 대한 Eric Renouf의 의견을 바탕으로 합니다.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이 인수에서 최소한 첫 번째 수준의 따옴표를 얻어야 함을 보여줍니다. 그렇기 때문에 추가 레벨을 추가하는 것이 좋습니다.