2017-04-23 2 views
0

선택적으로 백그라운드에서 프로그램을 실행하려고합니다. 제어 연산자를 선택적으로 전달하는 방법이 있습니까? 같은 뭔가가 : 내가 볼 수bash 스크립트의 선택적 매개 변수로 제어 연산자

if some_condition 
    bg=& 
fi 

myprog $bg 

그러나 배쉬는 (당연히) myprog에 인수로 $bg 치료. 백그라운드에서 실행중인 myprog을 얻으려고합니다.

이 방법이 있습니까?

+1

'eval myprog $ bg'? – Cyrus

+1

왜 "some_condition; then myprog &; fi"가 아닌가요? 그렇지 않으면 eval을 사용할 수 있습니다. – codeforester

+0

나는'eval'을 제안하려고했지만'eval'은'evil'입니다. 'if'문을 사용하는 것이 더 쉽고 안전합니다. –

답변

1

방법에 대해 :

if some_condition 
then 
    myprog & 
else 
    myprog 
fi 
+1

나는 이미 이것을하고있다. 그러나 조건부 검사없이 한 행에서이 문제를 처리 할 수있는 방법이 있는지 궁금합니다. –

+0

당신의 의도가'myprog'을 한 번만 지정한다면 아래의 해결책을 추가했습니다. 그러나'myprog'을 한 번만 실행한다면 James의 대답이 더 좋을 것입니다. –

0

난 당신이 한 번만 myprog를 지정하고자하는 경우, 어쩌면 당신은 그것을 실행 여부를 결정하는 함수를 사용할 수 있지만, 제임스 브라운의 대답에 찬성 해요 백그라운드에서 또는 아닙니다. 그러나,이

다음
run_in_background=false 

run_cmd() { 
    echo "Running [email protected]" 
    if $run_in_background; then 
     "[email protected]" & 
    else 
     "[email protected]" 
    fi 
} 

if [[ "$1" == '--bg' ]]; then 
    run_in_background=true 
    shift 
fi 

run_cmd "[email protected]" 

당신과 같이 실행할 수 있습니다 ... 당신이 처음에 더 라인을 작성 할 수 있습니다,하지만 당신은 잠재적으로 백그라운드에서 많이 실행하는 경우이 혜택을 누릴 수있는 의미 하는가 :

./script.bash --bg sleep 1 

아니면 스크립트 자체 내에서 실행할 수있는 경우 :

... (Continuing from inside the script above) 
run_cmd sleep 1 
run_cmd echo hello 
wait # Waits for background processes to finish 

를 그리고 명령은 전경 또는 backgro에있을 것 run_cmd에 전달되는 경우에 당신은 확인할 수 있습니다 und30 또는 --bg 플래그를 사용하십시오.

관련 문제