Bash 스크립트에서 마지막으로 실행된 명령의 프로세스 ID를 얻으려고 합니다. 보통 나는 이렇게 한다:
$ nohup ./test > nhout &
nohup: redirecting stderr to stdout
$ echo $!
3006196 #This is the PID
쉘 스크립트에서 똑같은 일을 하려고 합니다.
#!/bin/bash
for i in {1..10};do
`nohup ./testscript_${i} > nhout_${i} &`
echo $! >> pid_list.txt
done
그런데 확인해 보니 pid_list.txt
파일이 비어있습니다. 나는 이것이 $!
명령이 아닌 내가 실행한 스크립트를 참조하기 때문일 수 있음을 이해합니다 nohup
. 하지만 이 문제를 해결하는 방법을 모르고 온라인에서 리소스를 찾을 수 없습니다. 어떻게 이를 달성할 수 있나요?
답변1
nohup
명령 주위에 잘못된 백틱 쌍이 있습니다. 결과적으로 nohup
명령 nohup
은 실행될 백틱의 출력을 생성하기 위한 부작용으로만 실행됩니다.
이 시도:
#!/bin/bash
for i in {1..10}; do
nohup "./testscript_$i" > "nhout_$i" &
echo "$!" >> pid_list.txt
done