我正在运行一个命令
./startup.sh nginx:start
并且我收到了这个错误信息
zsh: permission denied: ./startup.sh
为什么会发生这种情况?
一定要给它执行权限。
cd ~/the/script/folder
chmod +x ./startup.sh
这将给用户、组和其他人都授予执行权限,因此要注意可能存在的安全问题。如需限制权限为单个访问类,请使用:
chmod u+x ./startup.sh
这将仅授予用户执行权限
chmod
所做的更改也会保存在 git 历史记录中,因此在提交更改后,在您的 CI 中,脚本也将具有执行权限。 - Peng-Watcher37-Link37或者您可以使用Bash:
bash startup.sh
那么您就不需要执行权限。
在MacOS Catalina中,苹果已将bash替换为zsh作为默认shell。这意味着他们有意在未来删除bash,因此这可能在以后不再是一个选项,但在Catalina上仍然可以使用。
bash
可以在没有执行权限的情况下工作,但是zsh
不行? - dijonkitchenchmod 755 <filename>
另一个令人烦恼的错误可能是sh脚本中的拼写错误。
在下面的例子中,ZSH的错误信息很令人困惑。ZSH确实告诉你zsh: permission denied: startup.sh
。但是你有访问脚本的权限。问题在于脚本中的无效Shebang行:
#!/usr/local/bin sh
正确的Shebang行可以是:
#!/usr/bin/env sh
以下内容适用于我,但我不知道为什么。
在进行以下更改之前,我的文件权限为-rwxr-xr-x
。即使我有执行权限,但仍然遇到了拒绝访问的错误。
我正在使用vs code编辑器。我执行了chmod +x filename
,文件权限仍然保持不变。这一次唯一的区别是我能够运行该文件。文件发生了变化,但看不出来。我之所以说看不出来,是因为在编辑器的源代码控制选项卡中,我的新文件和旧文件看起来完全一样。如果我隐藏我的更改并执行该文件,则会再次出现相同的错误。
我不知道为什么它有效,也不知道它是如何工作的,但值得一试。
如果有人能够解释为什么此前它无效,而我却具有相同的权限,那我将非常高兴?此外,我的文件发生了什么变化,我看不到它们的原因是什么?
在命令开始前添加sudo
,可以节省您的时间,例如:
sudo anyTemninalCommand