2009-11-11 8 views
10

나는 동적으로 bash에서 명령을 해석합니다. 동적으로 bash에서 명령 빌드

COMMAND="java myclass" 
${COMMAND} 

가 지금은 동적으로 출력 redirectes 명령을 구성하려면 :이 잘 작동

LOG=">> myfile.log 2>&1" 
COMMAND="java myclass $LOG" 
${COMMAND} 

이 명령은 여전히 ​​자바 프로세스를 호출,하지만 출력은

을 myfile.log로 리디렉션되지 않는다

또한, 내가 할 경우 :

BACKGROUND="&" 
COMMAND="java myclass $BACKGROUND" 
${COMMAND} 

을 명령은 t에서 실행되지 않습니다 그는 배경.

로그 리디렉션 및 배경 비트 작동 방법에 대한 단서가 있습니까?

(실제로,이 예제는 달리, LOG와 배경의 값이 동적으로 설정된다) (bash는 -x는 명령이 예상대로 건설되고 표시)

따옴표의 특별한 의미를 해제하기 때문에이 작동하지 않습니다

답변

4

>&. 쉘의 이러한 기능을 구현하는 명령을 실행해야합니다.

리디렉션하려면 로그 할 명령 앞에 exec >> myfile.log 2>&1으로 전화하십시오.

백그라운드에서 프로그램을 실행하려면 nohup (nohup cmd args...)을 사용하십시오.

+0

설명해 주셔서 감사합니다. – Joel

12

당신은 eval 명령으로 할 수있는 :

eval ${COMMAND} 
+4

명령의 매개 변수에 따옴표가 필요한 경우 'eval'이 깨질 수 있습니다. –

+0

나는이 대답을 사용하여 끝냈다 - 그러나 나는 Aarons를 약간 더 완벽하게 표시 했으므로 정확한 것으로 표시했다. – Joel

12

eval 당신이 원하는 않습니다.

#!/bin/bash 

CMD="echo foo" 
OUT="> foo.log" 
eval ${CMD} ${OUT} 


CMD="sleep 5" 
BG="&" 
eval ${CMD} ${BG} 
관련 문제