많은 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.sh
줄 sh
에 관계없이 스크립트를 실행하는 데 사용됩니다 #!
. 그러나 연결된 답변에서 알 수 있듯이 연산자를 자체로 sh
이해하지 못하고 읽는 것입니다.&>
nohup python print1.py &> 1.txt &
두 가지 명령으로:
nohup python print1.py &
> 1.txt &
첫 번째는 출력이 print1.py
기록되도록 nohup.out
하고 두 번째는 빈 출력을 만듭니다 1.txt
.
당신이 당신의 것을 bash
실행 하고 싶지 않다면 사용할 수 있습니다sh
command.sh
bash command.sh
아니면 #!/bin/bash
파일을 넣고 #!/bin/sh
실행 가능하게 만든 다음 간단히 실행하세요.
./command.sh
그 자체로.