POSIX garantisce che le utility standard sono in PERCORSO?


11

Nella sezione "Ricerca ed esecuzione di comandi" , la specifica POSIX dice che PATHviene cercato quando si trova un'utilità da eseguire (con alcune eccezioni). La specifica menziona PATHda qualche parte che verrà inizializzata su un valore che garantisce che saranno trovate tutte le utility standard?

O devo fare qualcosa di simile al seguente per garantire che non avrò mai un errore "comando non trovato" quando provo a eseguire un'utilità standard?

PATH=$(command -p sh -c 'printf %s "${PATH}"')

(vedere le specifiche POSIX commanddell'utilità )

Risposte:


13

Sì e no. In un ambiente POSIX, le utility devono comportarsi come descritto dalle specifiche. In pratica, ciò significa che devono essere presenti versioni conformi delle utility $PATH. Tuttavia, quando si esegue il programma su un sistema conforme a POSIX, è possibile che sia in esecuzione in un ambiente non conforme. In pratica, ciò che accade spesso è che il sistema operativo ha una modalità legacy e una modalità POSIX ed è in modalità legacy per impostazione predefinita. Peggio ancora che perdere alcuni comandi, la modalità legacy tende ad avere incompatibilità in essi, come opzioni con significati diversi.

Puoi recuperare un buono PATHcon getconf. Certo, è complicato, come getconfnell'originale $PATHpotrebbe non essere quello giusto. L'utilizzo dell'applicazione per il comando mostra un modo per farlo:

command -p getconf PATH

Per quanto ho capito le specifiche, ciò non è necessario se si esegue il programma in un ambiente conforme a POSIX; e se non si esegue il programma in un ambiente conforme a POSIX, POSIX non si applica. Tuttavia, l'utilizzo di questa applicazione può essere considerato come una raccomandazione: se non funziona, puoi sentirti autorizzato a lamentarti con il tuo fornitore del fatto che qualunque cosa stiano facendo riguardo alla lettera delle specifiche POSIX, non stanno rispettando il suo spirito.


Heh, non l'ho nemmeno notato getconf PATHnella sezione sull'utilizzo dell'applicazione. Grazie!
Richard Hansen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.