realpath
è probabilmente migliore
Ma ...
La domanda iniziale era molto confuso per cominciare, con un esempio poco legati alla domanda, come indicato.
La risposta selezionata risponde effettivamente all'esempio fornito, e non a tutti la domanda nel titolo. Il primo comando è la risposta (è proprio ? Dubito), e potrei fare altrettanto senza il '/'. E non riesco a vedere cosa sta facendo il secondo comando.
Diverse questioni si mescolano:
modifica di un percorso relativo in un assoluto, qualunque essa denota, forse nulla. (In genere, se si emette un comando come touch foo/bar
, il percorso foo/bar
deve esistere per te, e, eventualmente, essere utilizzato in calcolo, prima che il file è effettivamente creato.)
ci possono essere più assoluto percorso che denota lo stesso file (o potenziale file), in particolare a causa di collegamenti simbolici (symlink) sul percorso, ma probabilmente per altri motivi (un dispositivo potrebbe essere montato due volte in sola lettura). Uno può o non può voler risolvere esplicitamente tali collegamenti simbolici.
fino alla fine di una catena di collegamenti simbolici a un file o nome non symlink . Questo può o non può fornire un nome di percorso assoluto, a seconda di come è fatto. E uno può, o non può volere risolverlo in un percorso assoluto.
Il comando readlink foo
senza opzione dà una risposta solo se la sua tesi foo
è un link simbolico, e che la risposta è il valore di tale link simbolico. Nessun altro collegamento è seguito. La risposta potrebbe essere un percorso relativo: qualunque fosse il valore dell'argomento symlink.
Tuttavia, readlink
dispone di opzioni (-f -e o -m) che funzionerà per tutti i file, e dare un percorso assoluto (quello senza collegamenti simbolici) per il file in realtà indicata con l'argomento.
Questo funziona correttamente per tutto ciò che non è un collegamento simbolico, sebbene uno possa desiderare di utilizzare un percorso assoluto senza risolvere i collegamenti simbolici intermedi sul percorso. Questo viene fatto dal comando realpath -s foo
Nel caso di un argomento collegamento simbolico, readlink
con le sue opzioni saranno ancora risolvere tutti i collegamenti simbolici sul percorso assoluto per l'argomento, ma che includerà anche tutti i collegamenti simbolici che si possono incontrare per seguendo il valore dell'argomento. Potresti non volerlo se desideri un percorso assoluto all'argomento symlink stesso, piuttosto che a qualsiasi a cui possa collegarsi.Anche in questo caso, se foo
è un collegamento simbolico, otterrà un percorso assoluto senza risolvere i collegamenti simbolici, incluso quello fornito come argomento.
Senza l'opzione -s
, realpath
fa più o meno lo stesso di readlink
, tranne che per la semplice lettura del valore di un collegamento, così come molti altre cose. Non mi è chiaro il motivo per cui readlink
ha le sue opzioni , creando apparentemente una ridondanza indesiderata con realpath
.
L'esplorazione del web non dice molto di più, tranne che potrebbero esserci variazioni tra i vari sistemi.
Conclusione: realpath
è il comando migliore da utilizzare, con la massima flessibilità , almeno per l'uso richiesto qui.
possibile duplicato di [Conversione del percorso relativo in percorso assoluto] (http://stackoverflow.com/questions/4045253/converting-relative-path-into-absolute-path) o [this] (http: // stackoverflow. com/domande/2564634/bash-convert-assoluto-path-in-parente-path-dato-a-corrente-directory). –
non duplicato, ma simile – mpapis
possibile duplicato di [comando bash/fish per stampare il percorso assoluto su un file] (http: // stackoverflow.it/questions/3915040/bash-fish-command-to-print-absolute-path-to-a-file) –