Hat es Ausführungsberechtigungen? Versuchen Sie es chmod +x scriptnameund dann ./scriptname.
dirkgently
Antworten:
49
$prompt: /path/to/scriptund drücken Sie die Eingabetaste. Beachten Sie, dass Sie sicherstellen müssen, dass das Skript über Ausführungsberechtigungen verfügt.
Wenn Sie sich bereits im /path/to Verzeichnis befinden, z. B. mit dem cd /path/toBefehl, können Sie eingeben ./script, um Ihr Skript auszuführen. Vergessen Sie nicht, in diesem Fall das './' vor 'script'
FrViPofm
120
Noch eine andere Möglichkeit, es auszuführen (diesmal ohne Festlegen von Ausführungsberechtigungen):
Dies funktioniert nur, wenn für das Skript das Ausführungsbit gesetzt ist. Das muss wahrscheinlich angegangen werden.
Bryan Oakley
./scriptname.shfunktioniert bei mir aber scriptname.shgibt scriptname.sh: command not found. -rwxr-xr-xsind seine Berechtigungen.
Spikatrix
1
Der Rat an cdirgendwo überhaupt führt zu einem weiteren häufigen Missverständnis für Anfänger. Sofern das Skript nicht intern Abhängigkeiten aufweist, für die es in einem bestimmten Verzeichnis ausgeführt werden muss (z. B. das Lesen einer Datendatei, auf die das Skript unerklärlicherweise keine Option zum Verweisen bietet), sollten Sie es niemals cdirgendwo ausführen müssen, und zwar sehr wird oft nicht wollen.
Downvote: Das ist falsch, wenn es sich richtig um ein Bash-Skript handelt.
Tripleee
1
Upvote: Dies ist in Ordnung unter Mac OS X, wenn sich Ihr Bash-Skript im selben Verzeichnis befindet
Karl Taylor
30
@kot "Es funktioniert bei mir" ist sehr weit entfernt von "das ist eine richtige Antwort". Es kann funktionieren, wenn shes sich um einen Symlink bashhandelt oder wenn das Skript kein Bash-spezifisches Konstrukt verwendet. Im ersteren Fall ist die Verwendung von bashanstelle von shdie einzig richtige, tragbare Lösung. Im letzteren Fall ist dies nicht die richtige Antwort auf diese spezielle Frage, da das OP speziell nach Ratschlägen für ein Bash-Skript gefragt hat. Die falsche Antwort zu geben ist unverantwortlich; Benutzer, die den Unterschied nicht verstehen, posten häufig hier und müssen gezeigt werden, warum diese Antwort "für mich funktioniert" für sie nicht funktioniert hat.
@kot Ich wiederhole: Es gibt Situationen, in denen dies funktioniert (wie Sie herausgefunden haben), aber es ist im allgemeinen Fall keine korrekte Antwort auf die Frage in der Überschrift. Zumindest sollte diese Antwort die Bedingungen erklären, unter denen sie funktioniert; aber mein Vorschlag wäre, diese Antwort einfach zu löschen.
Tripleee
14
Zunächst müssen Sie es ausführbar machen mit : chmod +x name_of_your_file_script.
Nachdem Sie es ausführbar gemacht haben, können Sie es mit ausführen ./same_name_of_your_file_script
Es besteht keine Notwendigkeit, cdirgendwo; Sie können einen beliebig komplexen Pfadnamen als Argument für angeben bash. In der Tat funktioniert jedes Programm, das ein Dateinamenargument verwendet, auf diese Weise (oder ist erschreckend, geistesgestört kaputt).
Tripleee
10
Dies ist ein alter Thread, aber ich bin darauf gestoßen und bin überrascht, dass noch niemand eine vollständige Antwort gegeben hat. Also los geht's ...
Das Tutorial zum Ausführen eines Befehlszeilenskripts!
F: Wie führe ich dies im Terminal aus?
Verwirrungen und Konflikte:
Sie benötigen keine 'Erweiterung' (wie .sh oder .py oder irgendetwas anderes), aber es hilft, den Überblick zu behalten. Es wird nicht weh tun. Wenn der Skriptname jedoch eine Erweiterung enthält, müssen Sie diese verwenden.
Sie müssen sich aus irgendeinem Grund überhaupt nicht in einem bestimmten Verzeichnis befinden.
Sie nicht den Namen des Programms tippen müssen, der die Datei ausgeführt wird (BASH oder Python oder was auch immer) , wenn Sie wollen. Es wird nicht weh tun.
Sie nicht brauchen , sudoirgendetwas davon zu tun. Dieser Befehl ist für die Ausführung von Befehlen als anderer Benutzer oder als Root-Benutzer (Administrator) reserviert. Toller Beitrag hier .
(Eine Person, die gerade das Ausführen von Skripten lernt, sollte diesen Befehl nur verwenden, wenn ein wirklicher Bedarf besteht, z. B. die Installation eines neuen Programms. Ein guter Ort zum Ablegen Ihrer Skripte befindet sich in Ihrem Ordner ~ / bin Eingabe cd ~/binoder cd $HOME/binüber die Terminal-Eingabeaufforderung. Sie haben die vollständigen Berechtigungen in diesem Ordner.)
Um dieses Skript vom Terminal auf einem System vom Typ Unix / Linux auszuführen, müssen Sie drei Dinge tun:
Teilen Sie dem System den Speicherort des Skripts mit. (wähle eins)
Geben Sie den vollständigen Pfad mit dem Skriptnamen ein (z /path/to/script.sh. B. ). Sie können den vollständigen Pfad überprüfen, indem Sie pwdoder echo $PWDin das Terminal eingeben .
Aus demselben Verzeichnis ausführen und ./für den Pfad verwenden (z ./script.sh. B. ). Einfach.
Platzieren Sie das Skript in einem Verzeichnis auf dem System PATHund geben Sie einfach den Namen ein (z script.sh. B. ). Sie können das System überprüfen, PATHindem Sie eingeben echo $PATHoder echo -e ${PATH//:/\\n}eine übersichtlichere Liste wünschen.
Teilen Sie dem System mit, dass das Skript zur Ausführung berechtigt ist. (wähle eins)
Setzen Sie das "Ausführungsbit", indem Sie chmod +x /path/to/script.shdas Terminal eingeben .
Sie können auch verwenden, chmod 755 /path/to/script.shwenn Sie Zahlen bevorzugen. Es gibt eine große Diskussion mit einem kühlen Chart hier .
Teilen Sie dem System die Art des Skripts mit. (wähle eins)
Geben Sie den Namen des Programms vor dem Skript ein. (zB BASH /path/to/script.shoder PHP /path/to/script.php) Wenn das Skript eine Erweiterung wie .php oder .py hat, ist es Teil des Skriptnamens und Sie müssen es einschließen.
Verwenden Sie einen Shebang , den Sie #!/bin/bashin Ihrem Beispiel haben ( ). Wenn Sie dies als erste Zeile Ihres Skripts haben, verwendet das System dieses Programm, um das Skript auszuführen. Sie müssen keine Programme eingeben oder Erweiterungen verwenden.
Verwenden Sie einen "tragbaren" Shebang . Sie können das System auch die Version des Programms auswählen lassen, die zuerst im Programm angezeigt wird PATH, #!/usr/bin/envgefolgt vom Programmnamen (z . B. #!/usr/bin/env bashoder #!/usr/bin/env python3). Es gibt Vor- und Nachteile, die hier ausführlich besprochen werden .
Ziemlich gute Zusammenfassung. Vielleicht erinnern die Leute im letzten Beispiel daran, dass script.shund script.phpsind die wörtlichen Dateinamen dieser Skripte, und wenn Sie eine Erweiterung in den Dateinamen einfügen, müssen Sie diese beim Ausführen des Skripts einschließen (und umgekehrt; wenn das Skript dies nicht tut). keine Erweiterung haben, keine setzen). Dies ist anders als z. B. unter DOS, wo Sie den .batoder .exeaus dem Dateinamen weglassen können und Dateien eine Erweiterung aus einem kleinen Satz benötigen, um als ausführbar zu gelten.
Tripleee
1
Ein weiterer häufiger Anfängerfehler ist Mißverständnis den Unterschied zwischen path, /path, ./pathund ~/path. Ich denke, du willst es hier wahrscheinlich nicht erklären, aber vielleicht verlinkst du es mit einer Erklärung wie ... oh verdammt, ich musste das posten .
Dadurch wird das Skript in der aktuellen Shell ausgeführt, die aufgerufen werden muss. Dies ist nicht das, was die meisten Leute erwarten, wenn Sie einfach ein Skript ausführen. Dies kann Nebenwirkungen auf Ihre vorhandene Umgebung haben.
Software Engineer
-2
Wenn Sie sich in einem Verzeichnis oder Ordner befinden, in dem die Skriptdatei verfügbar ist, ändern Sie einfach die Dateiberechtigung im ausführbaren Modus
chmod +x your_filename.sh
Danach führen Sie das Skript mit dem folgenden Befehl aus.
$ sudo ./your_filename.sh
Über "." repräsentieren das aktuelle Verzeichnis. Hinweis! Wenn Sie sich nicht in dem Verzeichnis befinden, in dem sich die Bash-Skriptdatei befindet, ändern Sie das Verzeichnis, in dem sich die Datei befindet, mithilfe von
cd Directory_name/write the complete path
Befehl. Andernfalls kann Ihr Skript nicht ausgeführt werden.
Ich hoffe, dass alle dies tun werden, da ich das gesamte zugehörige Konzept zu diesem speziellen Problem erwähne.
Hassan Shamshir
Wie in anderen Antworten hier erläutert, sudoist es falsch und möglicherweise schrecklich falsch, wenn Sie es in einem nicht vertrauenswürdigen Skript verwenden, das die Kräfte missbraucht, die Sie ihm unnötig gegeben haben.
Tripleee
Der Rat an cdirgendwo ist schwer zu verstehen, aber wahrscheinlich auch falsch.
chmod +x scriptname
und dann./scriptname
.Antworten:
$prompt: /path/to/script
und drücken Sie die Eingabetaste. Beachten Sie, dass Sie sicherstellen müssen, dass das Skript über Ausführungsberechtigungen verfügt.quelle
/path/to
Verzeichnis befinden, z. B. mit demcd /path/to
Befehl, können Sie eingeben./script
, um Ihr Skript auszuführen. Vergessen Sie nicht, in diesem Fall das './' vor 'script'Noch eine andere Möglichkeit, es auszuführen (diesmal ohne Festlegen von Ausführungsberechtigungen):
quelle
CD in das Verzeichnis, das das Skript enthält, oder legen Sie es in einem bin-Ordner ab, der sich in Ihrem $ PATH befindet
Geben Sie dann ein
wenn im selben Verzeichnis oder
wenn es im bin-Ordner ist.
quelle
./scriptname.sh
funktioniert bei mir aberscriptname.sh
gibtscriptname.sh: command not found
.-rwxr-xr-x
sind seine Berechtigungen.cd
irgendwo überhaupt führt zu einem weiteren häufigen Missverständnis für Anfänger. Sofern das Skript nicht intern Abhängigkeiten aufweist, für die es in einem bestimmten Verzeichnis ausgeführt werden muss (z. B. das Lesen einer Datendatei, auf die das Skript unerklärlicherweise keine Option zum Verweisen bietet), sollten Sie es niemalscd
irgendwo ausführen müssen, und zwar sehr wird oft nicht wollen.Du könntest es tun:
sh scriptname.sh
quelle
sh
es sich um einen Symlinkbash
handelt oder wenn das Skript kein Bash-spezifisches Konstrukt verwendet. Im ersteren Fall ist die Verwendung vonbash
anstelle vonsh
die einzig richtige, tragbare Lösung. Im letzteren Fall ist dies nicht die richtige Antwort auf diese spezielle Frage, da das OP speziell nach Ratschlägen für ein Bash-Skript gefragt hat. Die falsche Antwort zu geben ist unverantwortlich; Benutzer, die den Unterschied nicht verstehen, posten häufig hier und müssen gezeigt werden, warum diese Antwort "für mich funktioniert" für sie nicht funktioniert hat.Zunächst müssen Sie es ausführbar machen mit :
chmod +x name_of_your_file_script
.Nachdem Sie es ausführbar gemacht haben, können Sie es mit ausführen
./same_name_of_your_file_script
quelle
Ändern Sie Ihr Verzeichnis mithilfe von CD in das Verzeichnis, in dem sich das Skript befindet Befehls Speicherort des
Geben Sie dann ein
quelle
cd
irgendwo; Sie können einen beliebig komplexen Pfadnamen als Argument für angebenbash
. In der Tat funktioniert jedes Programm, das ein Dateinamenargument verwendet, auf diese Weise (oder ist erschreckend, geistesgestört kaputt).Dies ist ein alter Thread, aber ich bin darauf gestoßen und bin überrascht, dass noch niemand eine vollständige Antwort gegeben hat. Also los geht's ...
Das Tutorial zum Ausführen eines Befehlszeilenskripts!
F: Wie führe ich dies im Terminal aus?
Verwirrungen und Konflikte:
sudo
irgendetwas davon zu tun. Dieser Befehl ist für die Ausführung von Befehlen als anderer Benutzer oder als Root-Benutzer (Administrator) reserviert. Toller Beitrag hier .(Eine Person, die gerade das Ausführen von Skripten lernt, sollte diesen Befehl nur verwenden, wenn ein wirklicher Bedarf besteht, z. B. die Installation eines neuen Programms. Ein guter Ort zum Ablegen Ihrer Skripte befindet sich in Ihrem Ordner ~ / bin Eingabe
cd ~/bin
odercd $HOME/bin
über die Terminal-Eingabeaufforderung. Sie haben die vollständigen Berechtigungen in diesem Ordner.)Teilen Sie dem System den Speicherort des Skripts mit. (wähle eins)
/path/to/script.sh
. B. ). Sie können den vollständigen Pfad überprüfen, indem Siepwd
oderecho $PWD
in das Terminal eingeben ../
für den Pfad verwenden (z./script.sh
. B. ). Einfach.PATH
und geben Sie einfach den Namen ein (zscript.sh
. B. ). Sie können das System überprüfen,PATH
indem Sie eingebenecho $PATH
oderecho -e ${PATH//:/\\n}
eine übersichtlichere Liste wünschen.Teilen Sie dem System mit, dass das Skript zur Ausführung berechtigt ist. (wähle eins)
chmod +x /path/to/script.sh
das Terminal eingeben .chmod 755 /path/to/script.sh
wenn Sie Zahlen bevorzugen. Es gibt eine große Diskussion mit einem kühlen Chart hier .Teilen Sie dem System die Art des Skripts mit. (wähle eins)
BASH /path/to/script.sh
oderPHP /path/to/script.php
) Wenn das Skript eine Erweiterung wie .php oder .py hat, ist es Teil des Skriptnamens und Sie müssen es einschließen.#!/bin/bash
in Ihrem Beispiel haben ( ). Wenn Sie dies als erste Zeile Ihres Skripts haben, verwendet das System dieses Programm, um das Skript auszuführen. Sie müssen keine Programme eingeben oder Erweiterungen verwenden.PATH
,#!/usr/bin/env
gefolgt vom Programmnamen (z . B.#!/usr/bin/env bash
oder#!/usr/bin/env python3
). Es gibt Vor- und Nachteile, die hier ausführlich besprochen werden .quelle
script.sh
undscript.php
sind die wörtlichen Dateinamen dieser Skripte, und wenn Sie eine Erweiterung in den Dateinamen einfügen, müssen Sie diese beim Ausführen des Skripts einschließen (und umgekehrt; wenn das Skript dies nicht tut). keine Erweiterung haben, keine setzen). Dies ist anders als z. B. unter DOS, wo Sie den.bat
oder.exe
aus dem Dateinamen weglassen können und Dateien eine Erweiterung aus einem kleinen Satz benötigen, um als ausführbar zu gelten.path
,/path
,./path
und~/path
. Ich denke, du willst es hier wahrscheinlich nicht erklären, aber vielleicht verlinkst du es mit einer Erklärung wie ... oh verdammt, ich musste das posten .Und noch ein Weg
Was bedeutet der Punkt?
quelle
Wenn Sie sich in einem Verzeichnis oder Ordner befinden, in dem die Skriptdatei verfügbar ist, ändern Sie einfach die Dateiberechtigung im ausführbaren Modus
chmod +x your_filename.sh
Danach führen Sie das Skript mit dem folgenden Befehl aus.
$ sudo ./your_filename.sh
Über "." repräsentieren das aktuelle Verzeichnis. Hinweis! Wenn Sie sich nicht in dem Verzeichnis befinden, in dem sich die Bash-Skriptdatei befindet, ändern Sie das Verzeichnis, in dem sich die Datei befindet, mithilfe von
cd Directory_name/write the complete path
Befehl. Andernfalls kann Ihr Skript nicht ausgeführt werden.
quelle
sudo
ist es falsch und möglicherweise schrecklich falsch, wenn Sie es in einem nicht vertrauenswürdigen Skript verwenden, das die Kräfte missbraucht, die Sie ihm unnötig gegeben haben.cd
irgendwo ist schwer zu verstehen, aber wahrscheinlich auch falsch.