nohup을 사용하여 여러 명령을 실행하는 방법


41

를 사용하여 여러 명령을 실행해야합니다 nohup. 각 명령은 이전 명령 다음에 실행해야합니다.

이 명령을 예로 사용했습니다.

nohup wget $url && wget $url2 > /dev/null 2>&1 &

그러나 그 명령은 작동하지 않았습니다.

이 목적을 위해 어떤 명령을 사용해야합니까?

답변:


55

그것을 감싸십시오 sh -c:

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &

1
nohup을 시작하면 "nohup : 입력을 무시하고 stderr를 stdout으로 리디렉션"하므로 "2> & 1"이 중복되지 않습니까?
harschware

1
아마. 나는 대답을 썼을 때 질문에서 그것을 복사했다고 생각합니다.
jw013

6

nohup없이 별도의 쉘 파일 (예 : command.sh)로 명령 목록을 작성하는 것이 훨씬 간단하지 않습니까?

그런 다음 전화하십시오.

nohup bash command.sh

4

다른 사람들은 이미에 대해 답변했습니다 nohup. 실용적인 참고 사항 : screen또는 tmux세션 내에서 이런 종류의 작업을 수행하는 것이 좋습니다 . 이렇게하면 연결을 끊었다가 나중에 다시 연결하여 출력 및 최종 결과를 볼 수 있습니다.


1
이 답변은 대화 형 시나리오에는 유용하지만 스크립트 나 자동화에는 적합하지 않습니다.
Jonathan Hartley

0

다음과 같이 간단합니다.

nohup sh -c "wget $url && wget $url2" > /dev/null 2>&1 &

그러나 URL에 특수 문자가 포함되어 있으면 더 안전한 옵션을 사용할 수있는 경우 문제가 발생할 수 있습니다.

nohup sh -c "wget \"$url\" && wget \"$url2\"" > /dev/null 2>&1 &

3
매개 변수를 전달하는 유일한 방법은 안전한 sh -c위치 매개 변수를 통해 액세스 할 수있는 별도의 인수, 경유 ( $0, $1, ...). 문자열 구문 분석을 위해 인수를 올바르게 인용하는 쉽고 간단한 방법은 없습니다. 큰 따옴표가 $url포함되어 있으면 이스케이프 된 큰 따옴표를 사용하려는 시도가 실패 합니다. a='problem"'; sh -c "echo \"$a\""직접 시도해보십시오 . sh -c실행하려고 하면 구문 오류가 발생 합니다 echo "problem"".
jw013

@ jw013 귀하의 이의 제기는 -oh의 답변에 동일하게 적용됩니까? 당신에 의해. 아마 아닐 것입니다. 그러나 왜 그런지 이해가되지 않습니다! :-)
Jonathan Hartley 2016 년

1
@JonathanHartley 나는 당신의 질문을 이해하지 못합니다. 당신이 나의이 대답을 비교하면 조심스럽게 당신은 방법의 차이를주의해야 $url하고 $url2사용된다.
jw013

물론 @ jw013. 나는 바보되고 있었다. 나를 똑바로 설정해 주셔서 감사합니다.
Jonathan Hartley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.