【问题标题】:Run script on mac prompt "Permission denied"在 mac 提示“权限被拒绝”上运行脚本
【发布时间】:2012-08-29 21:09:54
【问题描述】:

我是mac新手,对终端命令不熟悉,我把dvtcolorconvert.rb文件放在我的卷的根目录下,这个ruby脚本可以将xcode 3主题转换为xcode 4主题格式,即xxxxxxxx.dvtcolortheme格式.

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

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

【问题讨论】:

    标签: macos shell terminal


    【解决方案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/ 或 /Users/
      • @sean_m 感谢您的详细解释,我已经知道了。
      • 感谢您的精彩回复
      【解决方案5】:

      就我而言,我在 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"

        【讨论】:

          猜你喜欢
          • 2018-12-25
          • 1970-01-01
          • 2014-02-25
          • 1970-01-01
          • 2018-01-12
          • 1970-01-01
          • 2021-09-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多