Wie führe ich ein Skript in einem anderen Verzeichnis aus?

51

Ich habe es versucht

./home/user/scripts/someScript

aber es geht nicht

Datei oder Verzeichnis existiert nicht

irgendwelche Ideen?

UAdapter
quelle
2
Offensichtlich gibt es keine solche Datei oder ein solches Verzeichnis. Also gibst du den falschen Weg. Der Punkt dort bedeutet nicht "Ausführen". Es ist nur ein Teil des Weges. In der Shell gibt man normalerweise entweder Dateien ein, die ausgeführt werden sollen, oder Befehle (die eigentlich auch Dateien sind) :)
Pithikos
Beseitigen Sie diese Startphase und versuchen Sie es erneut. Alternativ kann auch ~ / scripts / someScript verwendet werden. Denken Sie auch an `` qoutes und die exec-Programme ($ man exec)
j0h

Antworten:

61

Der führende Punkt in Ihrem Befehl bedeutet "relativ zum aktuellen Verzeichnis". Entfernen Sie es und es wird auf die Datei someScriptim Verzeichnis verweisen /home/user/scripts:

/home/user/scripts/someScript

Wenn Sie die Meldung "Berechtigung verweigert" erhalten, liegt dies entweder daran, dass Sie nicht über ausreichende Berechtigungen verfügen, um auf die Datei im Verzeichnis anderer Benutzer zuzugreifen, oder daran, dass die Datei nicht ausführbar ist. Um es ausführbar zu machen, führen Sie Folgendes aus:

chmod +x /home/user/scripts/someScript
Lekensteyn
quelle
35

Wenn Ihr Skript auf Ressourcen in demselben Ordner zugreifen muss, in dem es ausgeführt wird, und Sie es als relative Pfade angegeben haben, wird Ihr Skript unterbrochen.

Ich füge cd $(dirname $0)dem Kopf meines Skripts immer ein hinzu , sodass der Ordner, der das Skript enthält, der Stammordner ist.

Naisanza
quelle
6

Entferne das .

Wenn Sie den Scrip ausführbar machen chmod 755 <nameofscript>, um ihn auszuführen, müssen Sie nur den Pfad zum Script eingeben.

Wenn Sie sehen, ./scriptdass es verwendet wird, teilt es der Shell mit, dass sich das Skript in demselben Verzeichnis befindet, in dem Sie es ausführen. Um den vollständigen Pfad zu verwenden, geben Sie Folgendes ein sh /home/user/scripts/someScript.

Bruno Pereira
quelle
sh /path/to/fileist anders als /path/to/file. shläuft /bin/shwas mit symlink ist /bin/dash.
Lekensteyn
Machen Sie einfach etwas klarer in den Beispielen, die Sie im Netz sehen. Normalerweise sehen Sie, dass sh ./somescriptdiese auch als "sh / path / to / script / scriptitself" eingegeben werden können.
Bruno Pereira