Bash에서 부모-자식 동작으로 스크립트를 실행하는 방법은 무엇입니까?

Bash에서 부모-자식 동작으로 스크립트를 실행하는 방법은 무엇입니까?

parent.sh및 라는 이름의 두 개의 스크립트 가 있다고 가정해 보겠습니다 child.sh. 스크립트 에는 줄이 parent.sh포함되고 스크립트에는 .bash child.shchild.shecho "This is the child script"

이제 사용자가 를 실행하면 parent.sh간단히 child.sh스크립트를 호출하고 종료해야 합니다. 그러나 사용자가 child.sh스크립트를 실행하면 언급된 대로 일부 오류가 발생해야 합니다 only parent.sh can execute the child.sh script.

스크립트를 실행하는 이러한 동작을 달성할 수 있는 방법이 있습니까? 이것은 단지 작은 예일 뿐입니다. 사용자가 실행할 수 있지만 only스크립트에 의해 실행 되어야 하는 스크립트가 많이 있습니다 parent.

이는 사용자가 실수로 잘못된 스크립트를 실행하지 않도록 하기 위한 것입니다. 나는 사용자의 권한을 빼앗고 싶지 않습니다 read/write.

내 요구사항을 간단히 말하면:

bash parent.sh -> execute bash child.sh -> execute something by child.sh

답변1

이를 달성하는 한 가지 방법은 다음과 같습니다.

$ cat parent.sh
#!/bin/sh

echo parent.sh running

./child.sh

$ cat other.sh
#!/bin/sh

echo other.sh running

./child.sh

$ cat child.sh
#!/bin/sh

parent="$(ps -o comm= -p $PPID)"

if [ "$parent" != parent.sh ]; then
    echo this script should be directly executed by parent.sh, not by $parent
    exit 1
fi

echo "child.sh proceeding"

$ ./parent.sh
parent.sh running
child.sh proceeding

$ ./other.sh
other.sh running
this script should be directly executed by parent.sh, not by other.sh

이는 직계 부모 프로세스가 예상되는 프로세스인지만 확인합니다. 프로세스 계층 구조에 대한 더 깊은 가시성이 필요한 경우 상위 관계를 올라가도록 스크립트를 조정해야 합니다.

또 다른 접근 방식은 사용자 정의 변수를 내보내고 하위 프로세스에 설정되어 있는지 확인하는 것입니다.

프로세스 이름을 위조하거나 변수를 설정하는 쉬운 방법이 있으므로 두 방법 모두 실제로 안전하지 않습니다.

관련 정보