Führen Sie das Skript auf der Mac-Eingabeaufforderung "Berechtigung verweigert" aus.


83

Ich bin neu auf dem Mac und kenne den Terminalbefehl nicht. Ich habe die dvtcolorconvert.rbDatei im Stammverzeichnis meines Volumes abgelegt. Dieses Ruby-Skript kann xcode 3-Themes in das xcode 4-Themes-Format konvertieren, das xxxxxxxx.dvtcolorthemeFormat ist.

Führen Sie dann das Skript /dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolorthemeauf dem Terminal aus, aber es wird immer die Meldung " Berechtigung verweigert " angezeigt .

Was ist daran falsch? Kann mir jemand helfen, dieses Problem zu lösen? Vielen Dank.

Antworten:


72

Bitte lesen Sie die gesamte Antwort, bevor Sie versuchen, mit zu laufen sudo

Versuche zu rennen sudo /dvtcolorconvert.rb ~/Themes/ObsidianCode.xccolortheme

Der Befehl sudo führt die folgenden Befehle mit den Berechtigungen "Superuser" oder "Root" aus. Auf diese Weise können Sie fast alles über die Befehlszeile ausführen. Das heißt, tun Sie das nicht! Wenn Sie ein Skript auf Ihrem Computer ausführen und es nicht benötigen, um auf die Kernkomponenten Ihres Betriebssystems zuzugreifen (ich vermute, Sie sind es nicht, da Sie das Skript auf etwas in Ihrem Home-Verzeichnis (~ /) aufrufen), dann sollte es von Ihrem Home-Verzeichnis ausgeführt werden, dh:

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

Verschieben Sie es in ~ / oder ein Unterverzeichnis und führen Sie es von dort aus aus. Sie sollten dort niemals Berechtigungsprobleme haben und es besteht kein Risiko, dass es auf etwas zugreift oder es ändert, das für Ihr Betriebssystem kritisch ist.

Wenn Sie weiterhin Probleme haben, können Sie die Berechtigungen für die Datei überprüfen, indem Sie sie ls -lim selben Verzeichnis wie das Ruby-Skript ausführen. Sie werden so etwas bekommen:

$ 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

Sie werden feststellen, dass in der Datei readme.txt -rw-r--r--links steht. Dies zeigt die Berechtigungen für diese Datei. Die 9 Zeichen von rechts können in Gruppen von 3 Zeichen von 'rwx' (Lesen, Schreiben, Ausführen) aufgeteilt werden. Wenn ich dieser Datei Ausführungsrechte hinzufügen möchte, würde ich sie ausführen chmod 755 readme.txtund dieser Berechtigungsteil würde rwxr-xr-x. Ich kann diese Datei jetzt ausführen, wenn ich möchte ./readme.txt(./ weist die Bash an, im aktuellen Verzeichnis nach dem beabsichtigten Befehl zu suchen, anstatt die Variable $ PATH zu durchsuchen).

schluchc spielt darauf an, auf der manpage nach chmod zu suchen man chmod. Dies ist der beste Weg, um Dokumentation zu einem bestimmten Befehl zu erhalten.man <command>


Vielen Dank! Aber wo ist das Home-Verzeichnis (~ /)? Es bedeutet Desktop?
Andy_24

Die Shell kann Ihnen das echo ~normalerweise mit sagen /Users/$USER. Der Desktop ist nur ein Verzeichnis darunter. Unix-GUIs verbergen das Home-Verzeichnis vor der Ansicht, aber es ist immer noch da.
Henk Langeveld

1
Sie können den Pfad zu Ihrem Home-Verzeichnis abrufen, indem Sie ausführen echo $HOME. Es wird wahrscheinlich so aussehen wie / Users / <Benutzername> oder möglicherweise / Users / <iTunes-Benutzername>
Sean_M

@sean_m Danke für deine ausführliche Erklärung, das weiß ich schon.
Andy_24

Vielen Dank für die tolle Antwort
Faris Rayhan

243

Haben Sie sich das Recht gegeben, das Skript auszuführen?

Der folgende Befehl als Superuser erledigt dies für Sie:

sudo chmod 755 'filename'

Für Details sollten Sie die Manpage von chmod lesen.


4
Dies sollte die akzeptierte Antwort sein. Klar, prägnant und es funktioniert einfach.
Dialex

3
Ich habe verwendet: sudo chmod 777 'Dateiname'
Hemant Kaushik

@HemantKaushik sicher, beide funktionieren, aber kennst du den Unterschied?
Hally9k

2
Mit @ hally9k 777 kann jeder Ihre Datei ändern. Mit 755 können nur Sie und der Root-Benutzer die Datei ändern, wodurch sie sicherer wird.
Steve Breese

4

In meinem Fall hatte ich einen dummen Tippfehler im Schebang gemacht.

Für den Fall, dass jemand anderes mit dicken Fingern über diese Frage stolpert:

Hoppla: #!/usr/local/bin ruby

Ich wollte schreiben: #!/usr/bin/env ruby

Der vage Fehler, den ZSH gibt, hat mich auf den falschen Weg gebracht:

ZSH: zsh: permission denied: ./foo.rb

Bash: bash: ./foo.rb: /usr/local/bin: bad interpreter: Permission denied


3

Sie sollten das Skript als "Superuser" ausführen, einfach "sudo" vor dem Befehl hinzufügen und Ihr Passwort eingeben, wenn Sie dazu aufgefordert werden.

Also versuche:

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

Wenn dies nicht funktioniert, passen Sie die Berechtigungen an:

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

2
Oooh, nicht unbedingt etwas, das ich vorschlagen würde, es sei denn, Sie sind sich verdammt sicher, dass das Skript nichts verletzen kann.
Paxdiablo


1

Überprüfen Sie die Berechtigungen für Ihr Ruby-Skript (möglicherweise keine Ausführungsberechtigung), Ihre Themendatei und Ihr Verzeichnis (falls es das Thema nicht lesen kann oder versucht, dort andere Themen zu erstellen) und das Verzeichnis, in dem Sie sich befinden, wenn Sie es ausführen das Skript (falls es temporäre Dateien im aktuellen Verzeichnis erstellt /tmp).

Jeder von ihnen könnte dir Kummer bereiten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.