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

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

명령 프롬프트에서 실행하면 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
} 

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

관련 정보