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 )

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.


Heh, eu nem percebi isso getconf PATHna seção de uso do aplicativo. Obrigado!
Richard Hansen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.