Es gibt verschiedene realpath
Befehle.
Das realpath
Dienstprogramm ist ein Wrapper um die realpath
Bibliotheksfunktionen und wurde viele Male neu erfunden .
Debian verwendet , um ein erhalten realpath
Paket ( getrennt von dwww
da holzig ) , die außer in Bezug auf Verpackung und Dokumentation seit 2001 nicht geändert hat, sondern wurde nun auslaufen. Dieses Hilfsprogramm war veraltet, weil es jetzt mehr Standardalternativen (GNU readlink
und bald GNU realpath
) gibt, aber zu der Zeit hatten die GNU-Hilfsprogramme überhaupt keine readlink
. Diese Implementierung realpath
unterstützt einige options
, um die Auflösung symbolischer Links zu verhindern oder eine nullterminierte Ausgabe zu erzeugen.
BusyBox enthält auch einen eigenen realpath
Befehl (der keine Option verwendet).
GNU coreutils hat im Januar 2012 einen realpath
Befehl in Version 8.15 eingeführt . Dies ist ein kompatibler Ersatz für BusyBox und Debian realpath
und hat auch viele Optionen gemeinsam mit GNU readlink
.
realpath
hat den gleichen Effekt wie readlink -f
bei GNU readlink
. Was die beiden Befehle (oder vielmehr die verschiedenen realpath
Befehle readlink -f
) unterscheidet, sind die zusätzlichen Optionen, die sie unterstützen.
GNU realpath
ist nicht veraltet; es hat das gegenteilige problem: es ist zu neu, um überall verfügbar zu sein. Debian ließ GNUrealpath
aus seinem coreutils
Paket aus und blieb bei seinem eigenen realpath
. Ich weiß nicht warum, da GNU realpath
ein Ersatz sein sollte. Ab Debian Jessie und Ubuntu 16.04 wird jedoch GNU realpath
verwendet.
Auf Linux-Systemen empfiehlt es sich derzeit, einen Pfad zu kanonisieren, der möglicherweise symbolische Links enthält readlink -f
.
BSD-Systeme haben einen readlink
Befehl mit anderen Fähigkeiten als GNU readlink
. Insbesondere hat BSD readlink
keine Möglichkeit, Pfade zu kanonisieren, sondern durchläuft nur den ihm übergebenen Symlink.
readlink
Übrigens hatte das gleiche Problem - es wurde auch viele Male erfunden (dieses Dienstprogramm nicht hinzuzufügen, als symbolische Links zu Unix hinzugefügt wurden, war eine bedauerliche Auslassung). Es hat sich jetzt in mehreren Implementierungen mit vielen inkompatiblen Flags (insbesondere BSD vs. GNU) stabilisiert.
readlink -f
war lange vor GNU in OpenBSD. Alle NetBSD, FreeBSD und OpenBSD haben jetztreadlink -f
(Ihr Link erwähnt es sogar).realpath
war lange Zeit in FreeBSD und IRIX (weiß nicht, ob es älter ist als das in Debian). HPUX und IRIX haben es auchreadlink
, wenn auch nicht-f
. Dasrealpath
Paket in Debian experimental ist jetzt das von coreutils (als Experiment, um zu sehen, ob es etwas kaputt macht). Das dwww verhält sichrealpath
eher wiereadlink -e
das GNUreadlink -f
, es ist also kein vollständiger Ersatzrealpath
Seit dem Jahr 2002 , dass in FreeBSD gewesen Vorherpwd
tat es (seit 2000,pwd some-file
nennen würderealpath()
auffile
). Debian hat eine hatrealpath
Paket seit 1996. Die auf IRIX wahrscheinlich früher obwohl ich keine Beweise dafür gefunden , anders als es in IRIX betrug 6,5 im Jahr 1998. OpenBSD eine hinzugefügt ,-f
umreadlink
im Jahr 1997 . GNUreadlink
wurde 2003 hinzugefügt und hatte es-f
von Anfang an.realpath
. Weiß jemand, ob es sich irgendwie von derreadlink -f
Version unterscheidet?tl; dr
readlink -f
kehrt0
für eine nicht vorhandene Datei in einem bestehenden Verzeichnis währendrealpath
Renditen1
. Allerdingsreadlink -e
verhält sich wierealpath
und zurück1
für eine nicht vorhandene Datei (Anmerkung der Redaktion am Ende sehen).readlink -f
readlink -e
realpath
readlink -f
mit nicht vorhandenem Verzeichnisreadlink -f
Das Verhalten hängt davon ab, welcher Teil des Pfades nicht vorhanden ist.Verfügbarkeit
readlink
wird in den meisten Linux-Distributionen installiert. Währendrealpath
muss oft explizit installiert werden.in Summe
Wenn du Anrufe ersetzen willst,
realpath ...
dann benutzereadlink -e ...
.Getestet mit readlink (GNU coreutils) 8.21 und realpath Version 1.19 auf Ubuntu 16.
( Ed .: @AnthonyGeoghegan schrieb " dies bezieht sich auf die Debian-Version von
realpath
. Die GNU-Version vonrealpath
verhält sich genauso wiereadlink -f
")quelle
realpath
. Die GNU-Version vonrealpath
verhält sich genauso wiereadlink -f
.