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과 마찬가지로 실행됩니다.