运行.sh脚本时出现权限被拒绝的错误。

./geany_run_script.sh: 5: ./geany_run_script.sh: ./Area_circumference: Permission denied

程序退出,代码为126。每次尝试执行我的代码时都会出现这个问题。可能的解决方案是什么?

2权限被拒绝错误仅在您没有足够的权限访问该文件时发生。 - Avinash Raj
如何更改权限。 - khwilo
请告诉我在哪里可以做这个,请给我一个示例。 - khwilo
当我这样做时,它告诉我这个chmod: 无法访问 `geany_run_script.sh': 没有那个文件或目录。我应该从终端运行它吗? - khwilo
可能是重复的问题:如何在终端中运行.sh文件? - Eliah Kagan
5个回答

这是一个链接,解释了关于更改文件权限(和所有权)的内容。
如果你想暂时跳过这些步骤,你可以在你的用户主目录中创建一个文件夹,在那里进行你的C程序(或其他程序)的工作。
你可以打开终端(按下Ctrl + Alt + T),然后使用cd命令进入目标目录:
cd /path/to/target

给文件"the_file_name"赋予执行权限(如果文件系统允许您具有读写权限):
chmod +x the_file_name

如何更改权限?有什么例子吗? - khwilo
问题是我该怎么做?我是一个新的Ubuntu用户,最近从Windows切换过来。 - khwilo
你的工作目录是什么,也就是你的源代码文件的位置在哪里?你有使用Windows命令行界面的经验吗? - rusty
@wkhwilo-012,请看看这是否有帮助,如果还有更多问题,请随时提问。 - rusty
@wkhwilo-012,请复制您的可执行文件 Area_circumference 并粘贴它(文件路径将被粘贴)以更新您问题的正文... - rusty
谢谢 @precise。我的deploy.sh脚本出现了权限问题,你的答案解决了我的问题。我只是通过进入路径并使用'chmod +x deploy.sh'为我的deploy.sh文件赋予权限---现在它完美地工作了!谢谢 - Michiel J Otto
公开可执行的吗? - itsazzad

你需要给予执行读取权限。按照以下步骤操作:
chmod u+r+x filename.sh

./filename.sh

当我们创建一个新的脚本文件时,默认情况下它具有读写权限。 但是如果我们想要执行它们,就需要像上面所示给予执行权限。

仅仅拥有执行位是不够的,对于shell脚本来说,必须能够读取文件才能执行它(与二进制文件相反,后者只需要执行权限位)


2给用户添加读取和执行权限。 - Pablo Recalde
2确实,第二个plus可以省略 - u+rx - Artfaith

或者你可以直接在你的shell中执行它(或其他版本的shell),如果你不想改变权限。
$ bash filename.sh

这个怎么运作? - undefined
@RobBell是一种用于解释bash脚本的shell程序。它的概要是bash [options] [command_string | file],所以我们可以像这样执行一个命令echo "echo hello world" | bash或者bash script.sh,因为我们不用./来执行脚本,所以甚至不需要在脚本中添加#!/bin/bash(指定解释器)。更具体地说,script.sh只是一个要被命令字符串bash script.sh中的解释器bash读取的文件。 - undefined
我指的是这个方法是如何绕过安全限制的? - undefined
1@RobBell 我不确定我能否用以下解释说服你。我不认为这是一种安全违规,尽管脚本甚至可以在其内容中修改自己的权限。当我们执行这样一个可读的脚本时,就像在终端中逐行执行其内容一样。 - undefined

打开终端应用程序,按下CTRL + ALT + T,或者使用图形环境中的相应快捷键(如TerminalxTerm)。
在屏幕上出现的统一窗口中,您会看到一个闪烁的字符,它就是终端光标:只需点击窗口并输入文本(通常是命令),然后按ENTER确认输入。
在光标之前,始终列出了您当前在文件系统中的位置,从根目录("/")开始,您的个人文件所在的位置称为"~"。
要更改目录/文件夹,请使用cd EXISTENTFOLDER(将EXISTENTFOLDER替换为文件夹名称);如果您感到迷失,只需键入cd即可立即返回到您的主目录!
现在,让我们解决您的问题:
  1. 使用cd命令找到包含源代码的目录。使用TAB键来帮助你。如果执行ls -lh命令,你将看到一系列可能的路径和可执行文件。

  2. 当找到被阻止的文件时,执行chmod +x 文件名(将"文件名"替换为你的源代码文件的名称)。

  3. 如果有多个被阻止的文件,执行chmod +x *以解锁当前目录中的所有文件。永远不要对危险或不安全的文件执行chmod +x操作

  4. 执行./文件名 你的参数来运行可执行文件。

  5. 请记住,如果你编译的程序尝试在你的主目录之外读写文件,你需要使用sudo ./文件名 你的参数root身份运行它。

如果你想获取某个命令的手册,请执行man 命令(将"命令"替换为确切的命令名称,Linux区分大小写)。

一些外壳具有“在此处打开终端”命令,以简化您的生活,请在将来搜索并记住命令外壳可能是您最好的朋友,如果您使用得当的话。:-D
就是这样。如果您需要更多帮助,请在此下方留言。 如果我正在帮助您,请按左侧的向上箭头;如果您解决了问题,请将此答案标记为最佳答案。
祝您在Linux和Ubuntu上有愉快的体验。

非常感谢。现在我可以在主目录下工作了。你之前要求我的操作无法被允许。它说我没有权限,但还是谢谢你的建议。 - khwilo

对于我们中的其他人,问题不是由于未设置执行位而引起的,@Avinash-Raj说得最好:
“只有当您没有足够的权限访问该文件时,才会出现“权限被拒绝”的错误。”
在我的情况下,是root缺少访问基于fuse的挂载点的权限。归根结底,无论脚本在谁的身份下运行,都缺乏访问或运行脚本所需的必要权限。
我将这个明显/琐碎的答案留在这里,供我的同伴fuse用户使用,因为谷歌绝对不会建议除了设置执行位之外的任何解决方案。

请参阅 https://askubuntu.com/a/1346745/633466 - undefined