선택적으로 백그라운드에서 프로그램을 실행하려고합니다. 제어 연산자를 선택적으로 전달하는 방법이 있습니까? 같은 뭔가가 : 내가 볼 수bash 스크립트의 선택적 매개 변수로 제어 연산자
if some_condition
bg=&
fi
myprog $bg
그러나 배쉬는 (당연히) myprog
에 인수로 $bg
치료. 백그라운드에서 실행중인 myprog
을 얻으려고합니다.
이 방법이 있습니까?
선택적으로 백그라운드에서 프로그램을 실행하려고합니다. 제어 연산자를 선택적으로 전달하는 방법이 있습니까? 같은 뭔가가 : 내가 볼 수bash 스크립트의 선택적 매개 변수로 제어 연산자
if some_condition
bg=&
fi
myprog $bg
그러나 배쉬는 (당연히) myprog
에 인수로 $bg
치료. 백그라운드에서 실행중인 myprog
을 얻으려고합니다.
이 방법이 있습니까?
방법에 대해 :
if some_condition
then
myprog &
else
myprog
fi
나는 이미 이것을하고있다. 그러나 조건부 검사없이 한 행에서이 문제를 처리 할 수있는 방법이 있는지 궁금합니다. –
당신의 의도가'myprog'을 한 번만 지정한다면 아래의 해결책을 추가했습니다. 그러나'myprog'을 한 번만 실행한다면 James의 대답이 더 좋을 것입니다. –
난 당신이 한 번만 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
플래그를 사용하십시오.
'eval myprog $ bg'? – Cyrus
왜 "some_condition; then myprog &; fi"가 아닌가요? 그렇지 않으면 eval을 사용할 수 있습니다. – codeforester
나는'eval'을 제안하려고했지만'eval'은'evil'입니다. 'if'문을 사용하는 것이 더 쉽고 안전합니다. –