Запустить скрипт в запросе Mac «Permission denied»

83

Я новичок в Mac с незнакомой командой терминала, я помещаю dvtcolorconvert.rbфайл в корневой каталог моего тома, этот скрипт ruby ​​может преобразовывать темы xcode 3 в формат тем xcode 4, который является xxxxxxxx.dvtcolorthemeформатом.

Затем запустите сценарий /dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolorthemeна терминале, но он всегда будет запрашивать " Permission denied ".

что с этим не так? Кто-нибудь может помочь мне решить эту проблему? Благодарю.

Andy_24
источник

Ответы:

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>

sean_m
источник
Благодаря! Но где же домашний каталог (~ /)? Это значит десктоп?
Andy_24 05
Оболочка может сказать вам это echo ~, как правило, с помощью /Users/$USER. Рабочий стол - это просто каталог под ним. Графические интерфейсы пользователя Unix скрывают домашний каталог от просмотра, но он все еще там.
Хенк Лангевельд
1
Вы можете получить путь к своему домашнему каталогу, запустив echo $HOME. Скорее всего, это будет выглядеть примерно так: / Users / <username> или, возможно, / Users / <iTunes username>
sean_m
@sean_m Спасибо за подробное объяснение, я это уже знаю.
Andy_24 05
Спасибо за потрясающий ответ
Фарис Райхан,
247

Вы дали себе права на выполнение скрипта?

Следующая команда как суперпользователь сделает это за вас:

sudo chmod 755 'filename'

Для получения подробной информации вы должны прочитать справочную страницу chmod.

Schluchc
источник
4
Это должен быть принятый ответ. Понятно, лаконично и просто работает.
dialex 01
3
Я использовал: sudo chmod 777 'filename'
Хемант
@HemantKaushik, конечно, они оба работают, но знаете ли вы разницу?
hally9k
3
@ hally9k 777 позволяет всем изменять ваш файл. С 755 только вы и пользователь root можете изменять файл, что делает его более безопасным.
Стив Бриз,
4

В моем случае я допустил глупую опечатку в 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

jbbuckley
источник
3

Вы должны запустить сценарий как «суперпользователь», просто добавьте «sudo» перед командой и введите свой пароль при появлении запроса.

Поэтому постарайтесь:

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

Если это не сработает, попробуйте изменить разрешения:

sudo chmod 755 /dvtcolorconvert.rb
sudo chmod 755 ~/Themes/ObsidianCode.xccolortheme
Йенс
источник
2
Оооо, не обязательно что - то я хотел бы предложить , если Вы не штопать уверен , что сценарий не может повредить что - нибудь.
paxdiablo
3

Для запуска в режиме администратора на mac

sudo su
Вайшнави Бала
источник
1

Проверьте разрешения на свой скрипт Ruby (возможно, не имеет разрешения на выполнение), файл и каталог вашей темы (на случай, если он не может прочитать тему или пытается создать там другие темы), а также каталог, в котором вы находитесь при запуске скрипт (если он создает временные файлы в текущем каталоге, а не в нем /tmp).

Любой из них может причинить вам горе.

Paxdiablo
источник