gpt4 book ai didi

linux - Bash:仅允许脚本通过从另一个脚本调用来运行

转载 作者:IT王子 更新时间:2023-10-29 00:54:54 26 4
gpt4 key购买 nike

我们有两个 bash 脚本来启动应用程序。第一个 (Start-App.sh) 设置环境,第二个 (startup.sh) 来自第三方,我们尽量不对其进行大量编辑。如果有人在第一个脚本之前运行第二个脚本,则应用程序不会正确启动。

有没有办法确保只能从 Start-App.sh 脚本调用 startup.sh?

它们都在同一个目录中,并在 Red Hat Linux 上通过 bash 运行。

最佳答案

Is there a way to ensure that the startup.sh can only be called from the Start-App.sh script?

确保?不。如果不在 all 处编辑 startup.sh 就更不用说了。但是您可以非常接近。

以下是三个建议 - 您可以使用其中一个,也可以使用它们的任意组合。


最简单,也可能是最好的方法是在 startup.sh 的顶部添加一行:

[ -z $CALLED_FROM_START_APP ] && { echo "Not called from Start-App.sh"; exit 42; }

然后像这样从 Start-App.sh 调用它:

export CALLED_FROM_START_APP=yes
sh startup.sh

当然,您可以自己从 shell 中设置此环境变量,因此它实际上不会确保任何事情,但我希望您的工程人员足够成熟,不要这样做。


您还可以从 startup.sh 中删除执行权限:

$ chmod a-x startup.sh

不会阻止人们使用sh startup.sh,所以这里的保证非常小;但它可能会阻止自动完成错误,并且会将文件标记为“不打算执行”- 如果我看到一个目录只有一个可执行的 .sh 文件,我将尝试运行 那个 一个,而不是其他一个。


最后,您或许可以重命名 startup.sh 脚本;例如,您可以将其重命名为 do_not_run,或者通过将其重命名为 .startup 来“隐藏”它。这可能不会干扰此脚本的运行(尽管我无法检查这一点)。

关于linux - Bash:仅允许脚本通过从另一个脚本调用来运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36265624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com