O POSIX garante que os utilitários padrão estejam no PATH?

11

Na seção "Pesquisa e execução de comandos" , a especificação POSIX diz que PATHé pesquisada ao encontrar um utilitário para executar (com algumas exceções). A especificação menciona algum lugar que PATHserá inicializado com um valor que garanta a localização de todos os utilitários padrão?

Ou preciso fazer algo como o seguinte para garantir que nunca receberei um erro "comando não encontrado" ao tentar executar um utilitário padrão?

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

(consulte a especificação POSIX do commandutilitário )

Richard Hansen
fonte

Respostas:

13

Sim e não. Em um ambiente POSIX, os utilitários devem se comportar conforme descrito na especificação. Na prática, isso significa que versões conformes dos utilitários devem estar presentes no $PATH. No entanto, ao executar seu programa em um sistema compatível com POSIX, você pode executá-lo em um ambiente não conforme. Na prática, o que geralmente acontece é que o sistema operacional possui um modo herdado e um modo POSIX, e está no modo herdado por padrão. Pior do que perder alguns comandos, o modo legado tende a ter incompatibilidades, como opções com significados diferentes.

Você pode recuperar um bem PATHcom getconf. Claro, é complicado, pois getconfno original $PATHpode não ser o caminho certo. O uso do aplicativo para o comando mostra uma maneira de fazer isso:

command -p getconf PATH

Tanto quanto eu entendo a especificação, isso não é necessário se você estiver executando seu programa em um ambiente em conformidade com POSIX; e se você não estiver executando seu programa em um ambiente compatível com POSIX, o POSIX não se aplicará. No entanto, esse uso do aplicativo pode ser tomado como uma recomendação: se isso não funcionar, você poderá reclamar ao seu fornecedor que, seja o que for que eles estejam fazendo em relação à letra da especificação POSIX, eles não estão de acordo com seu espírito.

Gilles 'SO- parar de ser mau'
fonte
Heh, eu nem percebi isso getconf PATHna seção de uso do aplicativo. Obrigado!
Richard Hansen