假设我有两个名为parent.sh
和 的脚本child.sh
。脚本parent.sh
包含bash child.sh
line 且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
请注意,这只是检查直接父进程是否是预期的进程。如果需要更深入地了解流程层次结构,则需要调整脚本以攀爬父级关系。
另一种方法可能是导出自定义变量并检查它是否在子进程中设置。
这两种方法都不是真正安全的,因为有一些简单的方法可以伪造进程名称或设置任何变量。