parent.sh
및 라는 이름의 두 개의 스크립트 가 있다고 가정해 보겠습니다 child.sh
. 스크립트 에는 줄이 parent.sh
포함되고 스크립트에는 .bash child.sh
child.sh
echo "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
이는 직계 부모 프로세스가 예상되는 프로세스인지만 확인합니다. 프로세스 계층 구조에 대한 더 깊은 가시성이 필요한 경우 상위 관계를 올라가도록 스크립트를 조정해야 합니다.
또 다른 접근 방식은 사용자 정의 변수를 내보내고 하위 프로세스에 설정되어 있는지 확인하는 것입니다.
프로세스 이름을 위조하거나 변수를 설정하는 쉬운 방법이 있으므로 두 방법 모두 실제로 안전하지 않습니다.