2010-06-27 15 views
10

Ich habe das folgende Skriptshebang Linie nicht in R Skript arbeiten

#!/usr/bin/Rscript 

print ("shebang works") 

in einer Datei namens shebang.r. Wenn ich laufe es von der Kommandozeile mit Rscript es

$ Rscript shebang.r 

funktioniert, aber wenn ich es von der Linie allein Befehl ausführen

$ shebang.r 

funktioniert es nicht. Der Befehl shebang.r wurde nicht gefunden.

Wenn ich geben (basierend auf andere Beispiele, die ich gesehen habe)

$ ./shebang.r 

Ich bekomme die Erlaubnis verweigert.

Ja, Rscript in/usr/bin-Verzeichnis

Antwort

12

die ausführbare Datei.

chmod 755 shebang.r 
+0

Es hat funktioniert! Gibt es neben 755 andere Möglichkeiten, die funktionieren? Ich habe vor, den Befehl auf meinen Laptop zu schreiben. Vielen Dank. – Milktrader

+0

@Miltrader: Was notwendig ist, ist, dass die Person, die versucht, die Datei auszuführen, eine Ausführungsberechtigung dafür hat. Lesen Sie die Manpage für 'chown' und den Abschnitt der' ls'-Manpage im "Long format" (d. H. 'Ls -l'). – dmckee

+0

Alles, was das ausführbare Bit für den Besitzer festlegt, sollte funktionieren, solange Sie der Eigentümer der Datei sind. Minimal benötigen Sie '100', aber dann können Sie es nicht mehr lesen oder schreiben. Sie wollen wahrscheinlich mindestens '700', was dem Besitzer Lese-, Schreib- und Ausführungsrechte gibt, aber alle Berechtigungen für alle anderen (außer root) verweigert. – Thomas

2

Neben Sjoerd Antwort ... Nur die in den Umgebungsvariablen PATH aufgeführten Verzeichnisse werden für Befehle kontrolliert auszuführen. Sie müssen ./shebang.r (im Gegensatz zu nur shebang.r) eingeben, wenn das aktuelle Verzeichnis, bekannt als ., nicht in Ihrem PATH ist.

zu inspizieren PATH Typ

echo $PATH 

Um .-PATH Typ

export PATH="$PATH:." 

Sie fügen Sie folgende Zeile zu ~/.bashrc hinzufügen können, um es automatisch passieren, wenn Sie eine neue Shell öffnen.

+0

ja, ich muss ./shebang.r verwenden, um es zur Arbeit zu bekommen. Mir wurde gesagt, dass ich hinzufüge. Zu der PATH-Variablen führt das Sicherheitsrisiko, aber ich könnte es trotzdem tun, da es mein PC ist und es ist nicht so, dass ich Raketen-Startcodes drauf habe. – Milktrader

+2

Das Sicherheitsrisiko besteht darin, dass Sie sich in einem Verzeichnis befinden, in dem jemand anders ein Programm namens "ls" anlegt, das Sie versehentlich ausführen könnten. Wenn '.' zuletzt in Ihrem' PATH' ist, ist das Risiko ziemlich gering, da die üblichen '/ bin/ls' Vorrang haben und' .' nur im Falle eines nicht existierenden Befehls gesucht wird. Dennoch würde ich empfehlen, dem 'PATH' des Root-Benutzers' .' hinzuzufügen, da der potentielle Schaden größer ist. Weitere https://listman.redhat.com/archives/redhat-list/1999-July/msg01969.html – Thomas