dirname
Dirname software | |
---|---|
Esempio di comando dirname
| |
Genere | Utility |
Sviluppatore | David MacKenzie, Jim Meyering |
Sistema operativo | Unix-like Multipiattaforma |
Licenza | coreutils: GPLv3+ (licenza libera) |
dirname è un programma per computer standard su Unix e sistemi operativi Unix-like. Quando a dirname
viene passato un percorso (pathname), tale comando cancellerà qualsiasi suffisso che inizia con l'ultimo carattere slash ('/') e restituirà il risultato. Il comando dirname
è descritto nella Single UNIX Specification ed è utilizzato principalmente negli shell script.
Storia
[modifica | modifica wikitesto]La versione di dirname
presente in GNU coreutils è stata scritta da David MacKenzie e Jim Meyering.[1][2]
Il comando dirname
è stato anche portato sul sistema operativo IBM i.[3]
Sintassi
[modifica | modifica wikitesto]La Single UNIX Specification per dirname
è:
dirname string
string
- Un percorso
Esempi
[modifica | modifica wikitesto]dirname
recupererà il nome del percorso della directory da un nome del percorso ignorando eventuali barre finali:
$ dirname /home/marco/documenti/base.wiki
/home/marco/documenti
$ dirname /home/marco/documenti/.
/home/marco/documenti
$ dirname /home/marco/documenti/
/home/marco
$ dirname base.wiki
.
$ dirname /
/
Prestazioni
[modifica | modifica wikitesto]Poiché dirname
accetta un solo operando, il suo utilizzo all'interno del ciclo interno degli shell script può essere dannoso per le prestazioni. Si consideri il seguente codice:
while read file; do
dirname "$file"
done < dell'input
L'estratto qui sopra causerebbe invocazioni di processo separate per ogni riga di input. Per questo motivo, in genere viene utilizzata invece la shell substitution:
echo "${file%/*}";
oppure nel caso fosse necessario gestire anche i percorsi relativi:
if [ -n "${file##*/*}" ]; then
echo "."
else
echo "${file%/*}";
fi
Si noti che questi frammenti di codice gestiscono le barre finali in modo diverso da dirname.
Idee erronee
[modifica | modifica wikitesto]Si potrebbe pensare che i percorsi che terminano con una barra finale siano una directory. Ma in realtà, la barra finale rappresenta tutti i file all'interno della directory.
/home/marco/documenti/.
Il modo corretto per rappresentare un percorso come una directory è quello di farlo terminare con una barra e un punto.[secondo cosa?]
Note
[modifica | modifica wikitesto]- ^ (EN) dirname(1) – Linux User Commands Manual, su linux.die.net. URL consultato il 26 gennaio 2022.
- ^ (EN) dirname – Commands & Utilities Reference, The Single UNIX Specification, Issue 7, su opengroup.org, The Open Group. URL consultato il 26 gennaio 2022.
- ^ (EN) IBM, System i 7.2, Programming Qshell, su ibm.com, p. 90. URL consultato il 5 settembre 2020.