Wokół jest kilka realpath
poleceń.
realpath
Narzędzie jest owinięcie wokół realpath
funkcji bibliotecznych i został odkryty na nowo wiele razy .
Debian wykorzystywane do utrzymywania realpath
pakiet ( oddzielony od dwww
od zdrewniałe ), które nie zmieniły się poza dotyczące opakowań i dokumentacji od 2001 roku, ale został zniesiony. To narzędzie było przestarzałe, ponieważ istnieje teraz więcej standardowych alternatyw (GNU readlink
i wkrótce GNU realpath
), ale w tym czasie narzędzia GNU nawet nie miały readlink
. Ta implementacja realpath
obsługuje kilka, options
aby zapobiec rozdzieleniu dowiązań symbolicznych lub wygenerować wyjście zakończone zerem.
BusyBox zawiera również własne realpath
polecenie (które nie ma żadnej opcji).
Coreutils GNU wprowadziło realpath
polecenie w wersji 8.15 w styczniu 2012 r. Jest to kompatybilny zamiennik dla BusyBox i Debian realpath
, a także ma wiele opcji wspólnych z GNU readlink
.
realpath
ma taki sam efekt jak w readlink -f
przypadku GNU readlink
. To, co odróżnia te dwa polecenia (a raczej różne realpath
od nich readlink -f
), to dodatkowe opcje, które obsługują.
GNU realpath
nie jest przestarzałe; ma odwrotny problem: jest zbyt nowy, aby był dostępny wszędzie. Debian zwykł pomijać GNUrealpath
ze swojego coreutils
pakietu i trzymać się własnego realpath
. Nie wiem dlaczego, skoro GNU realpath
powinno być zamiennikiem. Jednak w Debianie jessie i Ubuntu 16.04 realpath
używany jest GNU .
W systemach Linux najlepszym rozwiązaniem do kanonizacji ścieżki, która może zawierać dowiązania symboliczne, jest obecnie readlink -f
.
Systemy BSD mają readlink
polecenie o różnych możliwościach od GNU readlink
. W szczególności BSD readlink
nie ma opcji kanonizacji ścieżek, jedynie przegląda przekazane do niej dowiązanie symboliczne.
readlink
, nawiasem mówiąc, miał ten sam problem - został również wynaleziony wiele razy (nie dodawanie tego narzędzia, gdy dowiązania symboliczne były dodawane do Uniksa, było godnym pożałowania pominięciem). Teraz ustabilizował się w kilku implementacjach z wieloma niezgodnymi flagami (w szczególności BSD vs. GNU).
readlink -f
był w OpenBSD na długo przed GNU. Wszystkie NetBSD, FreeBSD i OpenBSD mają terazreadlink -f
( nawet twój link o tym wspomina).realpath
był w FreeBSD i IRIX od dłuższego czasu (nie wiem, czy poprzedza ten w Debianie). HPUX i IRIX równieżreadlink
, choć nie-f
.realpath
Pakiet w experimental Debian jest obecnie jednym z coreutils (jako eksperyment, aby zobaczyć czy łamie rzeczy). Dwwwrealpath
działa bardziej jakreadlink -e
GNU,readlink -f
więc nie jest to całkowite dropin zamieńrealpath
został w FreeBSD od roku 2002. Wcześniejpwd
robił to (od 2000,pwd some-file
nazwałbymrealpath()
nafile
). Debian marealpath
pakiet od 1996 roku. Ten na IRIX prawdopodobnie go poprzedza, chociaż nie znalazłem innych dowodów niż w IRIX 6.5 w 1998 roku. OpenBSD dodał-f
do niegoreadlink
w 1997 roku . GNU dodanoreadlink
w 2003 roku i tak było-f
od samego początku.realpath
. Czy ktoś wie, czy to w jakiś sposób różni się odreadlink -f
wersji?tl; dr
readlink -f
zwróci0
nieistniejący plik w istniejącym katalogu, podczas gdyrealpath
zwraca1
. Jednakreadlink -e
będzie się zachowywał jakrealpath
i powrócić1
do nieistniejącego pliku (patrz notatka Editors na końcu).readlink -f
readlink -e
realpath
readlink -f
z nieistniejącym katalogiemreadlink -f
zachowanie różni się w zależności od tego, która część ścieżki nie istnieje.Dostępność
readlink
jest zainstalowany w większości dystrybucji Linuksa. Podczas gdyrealpath
często musi być jawnie zainstalowany.W podsumowaniu
Jeśli chcesz zastąpić połączenia,
realpath ...
użyjreadlink -e ...
.Testowany z readlink (GNU coreutils) 8.21 i realpath wersja 1.19 na Ubuntu 16.
( Wyd .: @AnthonyGeoghegan napisał „ dotyczy to wersji Debiana
realpath
. Wersja GNUrealpath
zachowuje się tak samo jakreadlink -f
”)źródło
realpath
. Wersja GNUrealpath
zachowuje się tak samo jakreadlink -f
.