Wie führe ich ein Bash-Skript aus?

19

Also habe ich mein erstes Bash-Skript geschrieben:

#!/bin/bash
echo 'hello world!'
exit

Ich weiß, dass es den richtigen Ort zum Bash hat und ausführbar ist:

$ which bash
/bin/bash
$ chmod +x myscript.sh

Jetzt möchte ich es von der Kommandozeile ausführen, bekomme aber eine Fehlermeldung:

$ myscript.sh
myscript.sh: command not found

Also versuche ich es stattdessen und es funktioniert:

$ bash myscript.sh
hello world!

Muss ich es so immer ausführen? Ich habe das Gefühl, ich habe andere Skripte ausgeführt, ohne dass ich sie vorher ausführen muss bash. Wie kann ich myscript.sh ausführen, ohne dass ich es voranstellen muss bash?

Update: Hier finden Sie eine gute Erklärung, warum und wie ein Bash-Skript ausgeführt wird .

Andrew
quelle

Antworten:

28

Sie müssen die Datei ausführbar machen. Das kannst du mit machen

chmod +x <filename>

Wo ist der Name Ihres Skripts und dann müssen Sie ihm voranstellen, ./um die Shell anzuweisen, eine Datei im lokalen Verzeichnis auszuführen, wie z.

./script.sh

Sie können nur Dateien ausführen, die sich in Ihrem befinden PATHoder zu denen Sie einen Pfad angeben. ./Das lokale Verzeichnis befindet sich nicht in der PATHStandardeinstellung, da es möglicherweise für schändliche Zwecke verwendet wird. Stellen Sie sich ein Skript mit dem Namen " lsAbgelegt in einem Verzeichnis" vor, Sie gehen in dieses Verzeichnis, führen es aus lsund dieses Skript führt etwas Schlechtes aus.

Wenn Sie schon dabei sind, möchten Sie es möglicherweise portabler machen, indem Sie Shell anstelle von bash ausführen, indem Sie Folgendes verwenden:

#!/bin/sh

oder indem Sie bash ausführen, egal wo es installiert ist, solange es installiert ist:

#!/usr/bin/env bash
pupeno
quelle
Das habe ich schon mit chmod + x myscript.sh gemacht. Habe ich es falsch gemacht?
Andrew
1
Vermutlich fehlen Sie ./ Ich habe es der Antwort hinzugefügt.
Schüler
1

Stellen Sie zusätzlich zu den Ratschlägen von Fernández einen Punkt voran:

./myscript.sh

Aus Sicherheitsgründen wird das aktuelle Verzeichnis niemals in den Ausführungspfad aufgenommen.

Harrymc
quelle
1

Es gibt drei Möglichkeiten, ein Bash-Skript auszuführen. Mit Beispiel myscript.sh als das Skript, das Sie ausführen möchten.

Methode 1

Führen Sie das Skript als Unterprozess aus, der Berechtigungsprobleme auslöst, wenn nicht der Eigentümer des Schreibvorgangs. Sie können die Berechtigungen mit chmod ändern.

$ chmod + x myscript.sh

$ ./myscript.sh

Methode 2

Führen Sie das Skript als aktueller Benutzer aus. Wenn das Bash-Skript gut geschrieben ist, sollte es keine Fehler enthalten.

$ bash myscript.sh

Methode 3

ähnlich wie Methode 2, aber eine Abkürzung. Beachten Sie, dass dies auf der Annahme basiert, dass Sie in der aktuellen Sitzung die Bash-Shell verwenden.

$. myscript.sh

hoffe das hilft!:)

Jimmy MG Lim
quelle