在Mac提示符“权限被拒绝”上运行脚本


83

我是不熟悉终端命令的Mac初学者,我将dvtcolorconvert.rb文件放在卷的根目录中,这个ruby脚本可以将xcode 3主题转换为xcode 4主题xxxxxxxx.dvtcolortheme格式。

然后/dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme在终端上运行该脚本,但始终提示“ Permission denied ”。

这怎么了 有人可以帮助我解决这个问题吗?谢谢。

Answers:


72

请尝试阅读完整答案,然后再尝试运行 sudo

尝试跑步 sudo /dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme

sudo命令执行带有“超级用户”或“ root”特权的命令。这应该使您几乎可以从命令行执行任何操作。就是说,不要这样做!如果您在计算机上运行脚本并且不需要它来访问操作系统的核心组件(我猜您不是,因为您是在主目录(〜/)内的某个位置上调用脚本的),那么它应该从您的主目录运行,即:

~/dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme

将其移至〜/或子目录,然后从那里执行。您永远都不会在这里遇到权限问题,也不会有访问或修改对操作系统至关重要的内容的风险。

如果仍然有问题,可以通过ls -l在与ruby脚本相同的目录中运行来检查文件的权限。您将获得如下内容:

$ 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>


谢谢!但是主目录(〜/)在哪里?是台式机吗?
Andy_24 2012年

shellecho ~通常可以通过告诉您/Users/$USER。桌面只是其下方的目录。Unix GUI从视图中隐藏主目录,但是它仍然存在。
Henk Langeveld'9

1
您可以通过运行转到主目录的路径echo $HOME。可能看起来像/ Users / <用户名>或/ Users / <iTunes用户名>
sean_m 2012年

@sean_m感谢您的详细解释,我已经知道了。
Andy_24 2012年

感谢您的出色回答
Faris Rayhan

243

您是否赋予自己执行脚本的权利?

以下命令以超级用户身份为您完成:

sudo chmod 755 'filename'

有关详细信息,请阅读chmod的手册页。


4
这应该是公认的答案。清晰,简洁,它就是可行的。
Dialex '16

3
我使用:sudo的搭配chmod 777名''
与Hemant考希克

@HemantKaushik当然,它们都起作用,但是您知道区别吗?
hally9k '18

2
@ hally9k 777允许所有人修改您的文件。使用755,只有您和root用户才能修改文件,从而使文件更安全。
史蒂夫·布雷斯

4

就我而言,我在社邦里做了一个愚蠢的错字。

因此,以防其他人用粗胖的手指偶然发现了这个问题:

哎呀: #!/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


3

您应该以“超级用户”身份运行脚本,只需在命令前面添加“ sudo”,然后在出现提示时输入密码。

因此,请尝试:

sudo /dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme

如果这不起作用,请尝试调整权限:

sudo chmod 755 /dvtcolorconvert.rb
sudo chmod 755 ~/Themes/ObsidianCode.xccolortheme

2
哦,不是必然的东西我建议,除非你织补确保脚本不能伤害任何东西。
paxdiablo 2012年


1

检查Ruby脚本的权限(可能没有执行权限),主题文件和目录(以防它无法读取主题或试图在其中创建其他主题)以及运行时所在的目录脚本(以防在当前目录中创建临时文件而不是/tmp)。

他们中的任何一个都可能引起您的悲伤。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.