Ich habe ein Bash-Skript, das mit relativen Pfaden arbeitet. Es muss ein Arbeitsverzeichnis haben, das dem Verzeichnis entspricht, in dem das Skript gespeichert ist. Dies funktioniert gut, solange ich es von der Eingabeaufforderung aus starte, da ich zuerst in das Verzeichnis des Skripts wechseln kann. Wenn ich jedoch einen Symlink zum Skript in /etc/cron.hourly erstelle, bricht das Skript ab.
Ich brauche eine Möglichkeit, das Bash-Skript in das Verzeichnis zu wechseln, in dem das Skript gespeichert ist. Bisher bin ich jedoch erfolglos. Gibt es eine einfache Möglichkeit, dies zu tun, auch wenn das Skript von Cron über einen Symlink aufgerufen wird?
Akzeptierte Antwort:
Sie sollten dazu in der Lage sein.
- Der $0-Parameter wird zum vollständigen Pfad (einschließlich Name) des Skripts erweitert, als es aufgerufen wurde.
- Die eingebaute Shell-Funktion test (oder [ ] ) kann mit -L testen, ob ein Pfad ein Symlink ist
ls -l
, wenn es auf einen symbolischen Link angewendet wird, ergibt eine einzelne Ausgabezeile mit dem wahren Pfad als letztes Feld.
Das reicht aus, um den Ort der Quelle zu entdecken. Natürlich könnte das ein Symlink sein, was erfordern würde, dass Sie dies rekursiv tun …