GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verweisen Sie auf eine Datei im selben Verzeichnis wie ein Skript, das in $path gefunden wurde?

Ich habe eine Bash-Skriptdatei, die in einem Verzeichnis abgelegt wird, das zu $PATH hinzugefügt wurde, sodass ich das Skript von jedem Verzeichnis aus aufrufen kann.

Es gibt eine weitere Textdatei im selben Verzeichnis wie das Skript. Ich frage mich, wie ich auf die Textdatei im Skript verweisen soll?

Wenn das Skript beispielsweise nur den Inhalt der Textdatei ausgeben soll, cat textfile funktioniert nicht, da beim Aufruf des Skripts aus einem anderen Verzeichnis die Textdatei nicht gefunden wird.

Akzeptierte Antwort:

Diese sollten genauso funktionieren, solange es keine symbolischen Links gibt (in der Pfaderweiterung oder im Skript selbst):

  • MYDIR="$(dirname "$(realpath "$0")")"

  • MYDIR="$(dirname "$(which "$0")")"

  • Eine zweistufige Version einer der oben genannten:

    MYSELF="$(realpath "$0")"

    MYDIR="${MYSELF%/*}"

Wenn es auf dem Weg zu Ihrem Skript einen Symlink gibt, dann which wird eine Antwort ohne Auflösung dieses Links geben. Wenn realpath nicht standardmäßig auf Ihrem System installiert ist, können Sie es hier finden.

[BEARBEITEN]: Wie es scheint, ist realpath hat keinen Vorteil gegenüber readlink -f von Caleb vorgeschlagen, ist es wahrscheinlich besser, letzteres zu verwenden. Meine Timing-Tests zeigen, dass es tatsächlich schneller ist.


Linux
  1. So finden Sie die älteste Datei in einem Verzeichnisbaum in Linux

  2. Dasselbe Skript auf mehreren Servern über SSH ausführen?

  3. In dieselbe Datei wie die vom Befehl verarbeitete Quelldatei umleiten?

  4. Alle Terminalausgaben in einer Datei speichern?

  5. Was ist der Zweck der .bash_profile-Datei im Benutzer-Home-Verzeichnis in Linux

Ausgabe soll in Datei mit dem gleichen Namen wie die Eingabedatei gespeichert werden?

Verstehen des Verzeichnisses /etc/sysconfig

Wie finde ich den Besitzer einer Datei oder eines Verzeichnisses in Python?

Wie erhalte ich das absolute Verzeichnis einer Datei in Bash?

Das SH-Skript in $PATH wird unter Linux Alpine 3.11 nicht gefunden

Kann .so nicht im selben Verzeichnis wie die ausführbare Datei finden?