在 mac 提示“权限被拒绝”上运行脚本
Posted
技术标签:
【中文标题】在 mac 提示“权限被拒绝”上运行脚本【英文标题】:Run script on mac prompt "Permission denied" 【发布时间】:2012-08-29 21:09:54 【问题描述】:我是mac新手,对终端命令不熟悉,我把dvtcolorconvert.rb
文件放在我的卷的根目录下,这个ruby脚本可以将xcode 3主题转换为xcode 4主题格式,即xxxxxxxx.dvtcolortheme
格式.
然后在终端上运行脚本/dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme
,但总是提示“Permission denied”。
这有什么问题?有人可以帮我解决这个问题吗?谢谢。
【问题讨论】:
【参考方案1】:检查您的 Ruby 脚本的权限(可能没有执行权限)、您的主题文件和目录(以防它无法读取主题或尝试在其中创建其他主题)、和 运行脚本时所在的目录(以防它在当前目录而不是/tmp
中生成临时文件)。
其中任何一个都可能让你感到悲伤。
【讨论】:
【参考方案2】:您应该以“超级用户”身份运行脚本,只需在命令前添加“sudo”并在出现提示时输入您的密码。
那就试试吧:
sudo /dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme
如果这不起作用,请尝试调整权限:
sudo chmod 755 /dvtcolorconvert.rb
sudo chmod 755 ~/Themes/ObsidianCode.xccolortheme
【讨论】:
哦,不是必要我建议的,除非你该死确定脚本不会伤害任何东西。【参考方案3】:您是否赋予自己执行脚本的权利?
以下命令作为超级用户将为您执行此操作:
sudo chmod 755 'filename'
有关详细信息,您应该阅读 chmod 的手册页。
【讨论】:
这应该是公认的答案。清晰、简洁,而且很有效。 我用过:sudo chmod 777 'filename' @HemantKaushik 当然,它们都有效,但您知道区别吗? @hally9k 777 允许所有人修改您的文件。使用 755,只有您和 root 用户才能修改文件,从而使其更加安全。【参考方案4】:在尝试使用 sudo
运行之前,请阅读完整的答案
尝试运行sudo /dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme
sudo 命令以“超级用户”或“root”权限执行其后的命令。这应该允许您从命令行执行几乎任何东西。也就是说,不要这样做!如果您在计算机上运行脚本并且不需要它来访问操作系统的核心组件(我猜你不是因为你在你的主目录(~/)中调用脚本,那么它应该从你的主目录运行,即:
~/dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme
将其移动到 ~/ 或子目录并从那里执行。您不应该在那里遇到权限问题,也不会有访问或修改对您的操作系统至关重要的任何内容的风险。
如果您仍然遇到问题,您可以在与 ruby 脚本位于同一目录时运行 ls -l
检查文件的权限。你会得到这样的东西:
$ ls -l
total 13
drwxr-xr-x 4 or019268 Administ 12288 Apr 10 18:14 TestWizard
drwxr-xr-x 4 or019268 Administ 4096 Aug 27 12:41 Wizard.Controls
drwxr-xr-x 5 or019268 Administ 8192 Sep 5 00:03 Wizard.UI
-rw-r--r-- 1 or019268 Administ 1375 Sep 5 00:03 readme.txt
您会注意到 readme.txt 文件在左侧显示 -rw-r--r--
。这显示了该文件的权限。右边的 9 个字符可以分成 3 个字符为一组的 'rwx'(读、写、执行)。如果我想向这个文件添加执行权限,我会执行chmod 755 readme.txt
,并且权限部分将变为rwxr-xr-x
。我现在可以通过运行./readme.txt
来执行这个文件(./ 告诉 bash 在当前目录中查找预期的命令,而不是搜索 $PATH 变量)。
schluchc 暗示查看 chmod 的手册页,通过运行 man chmod
来执行此操作。这是获取给定命令文档的最佳方式,man <command>
【讨论】:
谢谢!但是主目录(~/)在哪里?是桌面的意思吗? shell 可以用echo ~
告诉你,通常是/Users/$USER
。桌面只是它下面的一个目录。 Unix GUI 隐藏了主目录,但它仍然存在。
您可以通过运行echo $HOME
获取到您的主目录的路径。它可能看起来像 /Users/就我而言,我在 shebang 中犯了一个愚蠢的错字。
因此,如果其他手指粗壮的人偶然发现这个问题:
哎呀:#!/usr/local/bin ruby
我是想写:#!/usr/bin/env ruby
ZSH 给出的模糊错误让我走错了路:
ZSH:zsh: permission denied: ./foo.rb
重击:bash: ./foo.rb: /usr/local/bin: bad interpreter: Permission denied
【讨论】:
区别在于绝对路径与相对路径。#!/usr/local/bin/ruby
将作为本地文件系统上的绝对路径工作,它的可移植性较差。或者,#!/usr/bin/env ruby
使用 Unix 程序 env
从您的路径环境变量中定位 ruby,这样更便于移植。【参考方案6】:
在mac中以管理员模式运行
sudo su
【讨论】:
【参考方案7】:在文件名前使用源代码,
我想从终端运行的文件是./jay/bin/activate
所以我使用了命令"source ./jay/bin/activate"
【讨论】:
以上是关于在 mac 提示“权限被拒绝”上运行脚本的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Mac OSX EACCES 上修复:权限被拒绝...您无权访问此文件
Visual Studio Code Node.js 在运行 npm start 命令时在 Mac 中给出权限被拒绝错误