jobs 명령이 쉘 스크립트에서 작동하지 않는 이유는 무엇입니까?

jobs 명령이 쉘 스크립트에서 작동하지 않는 이유는 무엇입니까?

명령 프롬프트에서 실행 하면 jobs -l실행 중인 작업의 상태가 표시되지만 ./tmp.sh 파일에서 실행하면

#! /bin/bash
jobs -l

빈 출력을 보여줍니다.

왜 그런 겁니까? 쉘 스크립트 내에서 특정 작업의 상태에 대한 정보를 어떻게 얻을 수 있습니까?

답변1

jobs

채용공고 보기현재 쉘에서 관리됨. 스크립트는 자체 셸 내에서 실행되므로 jobs스크립트 셸에서 관리하는 작업만 표시됩니다.

실제로 보려면 다음을 실행하세요.

#!/bin/bash
sleep 60 &
jobs -l

스크립트 내부의 쉘 스크립트 이전에 시작된 "작업"에 대한 정보를 보려면 이를 일반 프로세스로 취급하고 사용해야 합니다 ps. 스크립트 내의 변수를 사용하여 상위 셸(있는 경우 스크립트를 시작한 셸)에서 시작된 프로세스로 자신을 제한 $PPID하고 동일한 상위 PID를 공유하는 프로세스를 찾을 수 있습니다.

답변2

Stephen이 말했듯이, 새로운 쉘을 생성하는 것은 아마도 당신이 원하는 것이 아닐 것입니다. 다음에서 코드를 실행해야 합니다.현재 쉘.

코드는 source myscript.sh다음에서 코드를 실행하거나 선언하여 작동 할 수 있습니다.기능(bashrc 또는 소스의 별도 파일에 있을 수 있습니다).

myfunction () {
  jobs -l
} 

나는 이것을 사용한다내 도트 파일, 관심이 있으시면.

관련 정보