gpt4 book ai didi

linux - 当我是 root 时运行 shell 脚本,但是当从 Makefile 调用它时我得到一个被拒绝的权限(仍然是 root)

转载 作者:太空宇宙 更新时间:2023-11-04 09:34:19 28 4
gpt4 key购买 nike

我需要运行一个调用 shell 脚本的 Make 脚本

我可以直接以 root 身份运行 shell 脚本,但是当在 makefile 上运行 make 时(仍然以 root 身份),make 被拒绝运行相同 shell 脚本的权限?

Makefile 中有问题的那一行是:

PLATFORM=$(shell $(ROOT)/systype.sh)

我可以进入并对系统上每个 Makefile 脚本的每个 PLATFORM 变量的值进行硬编码,但这将是毫无意义的修复,我想了解为什么会出现“权限被拒绝”错误:

make[1]: execvp: ../systype.sh: Permission denied

PS:即使 shell 脚本仅包含 lsecho linux,shell 脚本的内容也不是问题 Make 实用程序的运行权限被拒绝shell 脚本。

PS:我不是制作专家,所以如果解释与制作有关,请尽可能具体。

最佳答案

在您上面的评论中,您说当您“手动运行”时使用 。 scriptname.sh,对吗?您使用 . 后跟 scriptname.sh

这不会运行 脚本,获取 脚本。您关于 scriptname.sh 将在有和没有 x 权限的情况下执行的声明,因为它是一个 shell 脚本 是错误的。如果您具有读取权限,则可以source 脚本。但是除非您具有执行权限,否则您不能执行脚本。

“Sourcing”意味着新的 shell 没有启动:相反,您当前的 shell(您在其中键入该命令)读取脚本的内容并运行它们,就像您键入它们一样在当前 shell 中手动输入。最后,在该脚本中执行的所有副作用(目录更改、变量分配等)在您当前的脚本中仍然可用。

“执行”意味着脚本被当作一个程序来对待,但程序是一个新启动的shell,然后读取脚本的内容并执行它。一旦脚本结束,shell 就会退出,所有副作用都会丢失。

make 中的 $(shell ...) 函数不会为您的脚本提供源代码(除非您在那里也使用了 .,而您没有)。它将尝试运行您的脚本。您显示的错误意味着 systype.sh 没有设置执行位,或者它有一个无效的 #!线。我想不出其他解释。

如果获取文件确实可以满足您的需求,那么为什么不在 $(shell ...) 中使用与您个人使用相同的方法:

PLATFORM=$(shell . $(ROOT)/systype.sh)

如果更改用户权限无效,您确定拥有该脚本的用户与您用来调用 make 的用户相同吗?你说你“以根用户身份运行”;脚本是 root 拥有的吗?或者它归您所有并且您正在运行 sudo make 或类似的程序?

我不知道你为什么不直接使用:

chmod +x systype.sh

收工。

关于linux - 当我是 root 时运行 shell 脚本,但是当从 Makefile 调用它时我得到一个被拒绝的权限(仍然是 root),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28332397/

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