Wie führe ich ein Bash-Skript über einen absoluten Pfad aus?

3

Ich habe eine Datei:

/Users/danylo.volokh/test/test_bash_script.sh

Der Inhalt ist sehr einfach:

#!/usr/bin/env bash
echo "-- print from script"

Ich bin im Ordner "danylo.volokh"

Dieser Befehl läuft gut:

Danilos-MacBook-Pro:~ danylo.volokh$ test/test_bash_script.sh 
-- print from script

Aber wenn ich versuche, mit absolutem Pfad einzulaufen, erhalte ich eine Fehlermeldung:

Danilos-MacBook-Pro:~ danylo.volokh$ /test/test_bash_script.sh 
-bash: /test/test_bash_script.sh: No such file or directory

Ich möchte einen Befehl mit absolutem Pfad aus einem beliebigen Ordner ausführen und das Skript ausführen lassen.

Danylo Volokh
quelle
3
Der absolute Pfad ist /Users/danylo.volokh/test/test_bash_script.shnicht/test/test_bash_script.sh
Slebetman
3
Diese Frage hat ein grundlegendes Verständnisproblem. VTC?
cst1992
Ich verstehe es nicht. Sie kennen anscheinend den vollständigen Pfad Ihres Skripts, werden es aber nicht verwenden?
njzk2

Antworten:

13

Ich möchte einen Befehl mit absolutem Pfad aus einem beliebigen Ordner ausführen und das Skript ausführen lassen.

Wenn ich versuche, mit absolutem Pfad einzulaufen, erhalte ich eine Fehlermeldung:

/test/test_bash_script.sh 
-bash: /test/test_bash_script.sh: No such file or directory

Datei /test/test_bash_script.shexistiert nicht und kann daher nicht ausgeführt werden.

  • Ein absoluter Pfad ist definiert als die Angabe des Speicherorts einer Datei oder eines Verzeichnisses aus dem Stammverzeichnis ( /).

  • /testkann kein absoluter Pfad sein, da das Verzeichnis /test nicht existiert (es ist ein Unterverzeichnis Ihres Home-Verzeichnisses).

Sie haben zwei Möglichkeiten:

  1. Verwenden Sie den richtigen absoluten Pfad zum Skript:

    /Users/danylo.volokh/test/test_bash_script.sh
  2. Verwenden Sie den Pfad, der auf Ihrem Basisverzeichnis basiert:

    ~/test/test_bash_script.sh

Was ist ein absoluter Weg?

Ein absoluter Pfad ist definiert als die Angabe des Speicherorts einer Datei oder eines Verzeichnisses aus dem Stammverzeichnis ( /).

Quell Absoluter Pfad vs. relativer Pfad in Linux / Unix

Da Schrägstriche immer Namenskomponenten trennen, wird angenommen, dass das namenlose "ROOT" -Verzeichnis mit dem Pfadnamen beginnt, wenn ein Pfadname mit einem Schrägstrich beginnt. Das ROOT-Verzeichnis hat keinen Namen. Es ist das Stammverzeichnis des gesamten Unix-Dateisystembaums.

Ein mit einem Schrägstrich beginnender Pfadname wird als absoluter Pfadname bezeichnet, da er immer am ROOT beginnt.

Da es schwierig ist, über ein Verzeichnis ohne Namen zu sprechen, verwenden wir normalerweise (fälschlicherweise) den Namen "/" (Schrägstrich) für das ROOT-Verzeichnis. Dies ist falsch, da Namenskomponenten eines Pfadnamens keine Schrägstriche und Schrägstriche als separate Namenskomponenten enthalten dürfen. Verstehen Sie, dass wir mit "/" für ROOT wirklich "das namenlose ROOT-Verzeichnis links vom Schrägstrich" meinen, nicht den Schrägstrich selbst.

Quell- Unix / Linux-Pfadnamen (absolut, relativ, Punkt, Punkt Punkt)

DavidPostill
quelle
@tatsu "Es ist für mich absolut unwirklich, dass das Ausführen von sh-Skripten vom absoluten Pfad aus verhindert wird", heißt es nicht. Bitte lesen Sie die Antwort sorgfältig durch.
DavidPostill
@tatsu Warum fügst du .einem absoluten Pfad hinzu? .verweist auf das aktuelle Verzeichnis ... Bitte lesen Sie die Antwort sorgfältig und den Link in der Antwort.
DavidPostill
ok ich lese von dem, was ich verstehe, ohne den Punkt, sollte es funktionieren. EDIT: yep es funktioniert. das ist nur verwirrend. Wie können sie erwarten, dass wir dieses Zeug erraten?
Tatsu
2

Der absolute Weg ist /Users/danylo.volokh/test/test_bash_script.shnicht /test/test_bash_script.sh. Bash ist dann richtig.

Kamil Maciorowski
quelle