nohup 여러 순차 명령

nohup 여러 순차 명령

nohup두 개의 명령이 차례로 필요합니다 . 두 번째 명령은 첫 번째 명령 다음에 실행되어야 합니다. 명령은 다음과 같습니다.

tar -zcf archive.tar.gz.tmp mydir
mv archive.tar.gz.tmp archive.tar.gz

백그라운드에서 실행하려면 명령이 필요하지만 동시에 둘 다는 아닙니다. 두 번째 명령은 첫 번째 명령이 완료된 후에 실행되어야 합니다. 나는 이것을 시도했다:

nohup tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &

하지만 명령은 백그라운드에서 실행되지 않습니다. Bash 프롬프트는 두 명령이 완료될 때까지 기다렸다가 다른 프롬프트를 표시합니다. 백그라운드에서 실행하려면 필요합니다.

만약 내가한다면:

nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 &

그것은 백그라운드에서 완벽하게 실행됩니다. 둘 이상의 명령을 수행하려고 할 때만 발생합니다.

나는 또한 다음을 시도했습니다.

nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 & ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &

하지만 그것도 효과가 없었습니다. 구문이 잘못되었습니다. 이 작업을 수행할 수 있는 방법이 있다고 확신하지만 구문이 확실하지 않습니다.

내가 생각할 수 있는 유일한 대안은 명령을 파일에 넣고 .sh해당 파일을 삭제하는 것입니다. 그러나 이것이 반드시 구현해야 하는 Linux 시스템에서 할 수 있는 것은 아닙니다(권한 제한 등).

답변1

가장 쉬운 해결책: 다음을 사용하여 쉘 스크립트를 작성하십시오.

 #/bin/sh
 tar -zcf archive.tar.gz.tmp mydir
 mv archive.tar.gz.tmp archive.tar.gz

그리고 nohup myscript. 아마도 스크립트에 추가 문서가 있을 것입니다.

(예, 저는 문서 작업을 싫어합니다. 특히 여러 사람과 함께 일할 때나 언젠가 직장을 그만둘 수도 있고 후임자가 이유를 알아내야 할 경우에는 더욱 그렇습니다."


대안은 하위 작업에 대한 새 셸을 시작하는 것입니다(이 경우 tar 및 이동).

nohup `$(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz)


대안 2:

nohup``tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz```.

그래도 나는 대본을 정말 좋아한다. 그 안에 있는 주석은 당신이나 다른 사람이 몇 년 후에 스크립트를 보고 왜 이런 식으로 작성되었는지 궁금해할 때 매우 유용할 수 있습니다.

관련 없는 메모: 백틱이 포함된 답변을 도대체 어떻게 게시합니까? (쉘이 '이 명령을 사용하고 출력을 다른 명령에 입력으로 공급'하는 명령).

답변2

괄호가 필요하다고 생각합니다.

nohup $(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz) >/dev/null 2>&1 &

답변3

아마도 bash 랩일까요?

nohup bash -c 'tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1' &

답변4

screen다음을 사용 하여 명령을 내리고 screen 세션에서 분리할 수 있습니다 .

screen
tar -zcf archive.tar.gz.tmp mydir && mv archive.tar.gz.tmp archive.tar.gz
ctrl-a d to detach

명령은 nohup과 마찬가지로 실행됩니다.

관련 정보