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

그래서 제가 이해한 바에 따르면 공백 뒤의 단어를 항아리 이름으로 사용한다는 것입니다.

그래서 내 질문은, 공백이 포함된 매개변수를 전달하는 방법은 무엇입니까?

답변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이 인수에서 최소한 첫 번째 수준의 따옴표를 얻어야 함을 보여줍니다. 그렇기 때문에 추가 레벨을 추가하는 것이 좋습니다.

관련 정보