如何在bash中以父子行为执行脚本?

如何在bash中以父子行为执行脚本?

假设我有两个名为parent.sh和 的脚本child.sh。脚本parent.sh包含bash child.shline 且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

请注意,这只是检查直接父进程是否是预期的进程。如果需要更深入地了解流程层次结构,则需要调整脚本以攀爬父级关系。

另一种方法可能是导出自定义变量并检查它是否在子进程中设置。

这两种方法都不是真正安全的,因为有一些简单的方法可以伪造进程名称或设置任何变量。

相关内容