.sh 파일의 nohup에서 리디렉션된 출력이 제대로 작동하지 않습니다.

.sh 파일의 nohup에서 리디렉션된 출력이 제대로 작동하지 않습니다.

많은 Python 스크립트를 실행하고 출력을 저장하고 싶습니다. 왜냐하면 터미널에서 하나씩 실행하는 것은 너무 번거롭기 때문입니다. 제안에 따라 쉘 스크립트(.sh)를 사용하기로 결정했습니다.

문제를 단순화하기 위해 실행하려는 두 개의 Python 스크립트( print1.py및 )가 있다고 가정해 보겠습니다 print2.py. 스크립트 print1.py출력 번호는 1이고 스크립트 print2.py출력 번호는 2입니다.

쉘 스크립트를 사용하지 않고도(즉, 명령을 개별적으로 입력하는 등) 원하는 결과를 얻을 수 있습니다.

쉘 스크립트를 사용하지 않는 경우 내가 사용할 명령은 다음과 같습니다.

$ nohup python print1.py &> 1.txt &
$ nohup python print2.py &> 2.txt &

1.txt각각 및 로 출력을 리디렉션합니다 2.txt. 따라서 1.txt숫자 1이 포함되고 2.txt숫자 2가 포함됩니다. 이 두 명령을 터미널에 별도로 입력하면 제대로 작동합니다.이것이 내가 원하는거야.

쉘 scipt를 사용하면 원하는 것을 얻을 수 없습니다(리디렉션이 작동하지 않는 것 같습니다).

그러나 쉘 스크립트를 사용하면 다음과 같습니다 command.sh.

#! /bin/sh
nohup python print1.py &> 1.txt &
nohup python print2.py &> 2.txt &

나는 들어간다

$ sh command.sh

달리기 command.sh. 출력이 내가 기대했던 것과 다릅니다. 생성 1.txt될 것이지만 2.txt아무것도 포함하지 않습니다. nohup.out숫자 1과 2가 포함된 파일도 생성됩니다 .

터미널에 표시된 출력은 다음과 같습니다.

$ nohup: appending output to 'nohup.out'
nohup: appending output to 'nohup.out'

이 답변프롬프트는 동일합니다 #! /bin/sh. 일부 쉘에서는 이를 이해하지 못할 수도 있습니다 &>. 그래서 저도 #! /bin/sh로 바꿔 봤는데 #! /bin/bash... 그런데 똑같네요.

명령만 입력하는 것과 동일한 결과를 얻기 위해 쉘 스크립트를 사용할 수 있습니까?

답변1

명시적으로 지정하면 sh command.shsh에 관계없이 스크립트를 실행하는 데 사용됩니다 #!. 그러나 연결된 답변에서 알 수 있듯이 연산자를 자체로 sh이해하지 못하고 읽는 것입니다.&>

nohup python print1.py &> 1.txt &

두 가지 명령으로:

nohup python print1.py &
> 1.txt &

첫 번째는 출력이 print1.py기록되도록 nohup.out하고 두 번째는 빈 출력을 만듭니다 1.txt.

당신이 당신의 것을 bash실행 하고 싶지 않다면 사용할 수 있습니다shcommand.sh

bash command.sh

아니면 #!/bin/bash파일을 넣고 #!/bin/sh실행 가능하게 만든 다음 간단히 실행하세요.

./command.sh

그 자체로.

관련 정보