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

10

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

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 utilitário command )

    
por Richard Hansen 24.05.2012 / 01:10

1 resposta

11

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

Você pode recuperar um bom PATH com getconf . Claro, é complicado, pois getconf no original $PATH pode não ser o correto. O uso do aplicativo para o comando mostra uma maneira de fazer isso:

command -p getconf PATH

Tanto quanto eu entendi a especificação, isso não é necessário se você estiver executando o programa em um ambiente em conformidade com POSIX; e se você não estiver executando seu programa em um ambiente em conformidade com POSIX, o POSIX não se aplica. No entanto, esse uso do aplicativo pode ser tomado como uma recomendação: se isso não funcionar, você pode se sentir no direito de reclamar com o fornecedor que, independentemente do que esteja fazendo em relação à letra da especificação POSIX, eles não estão cumprindo seu espírito. / p>     

por 24.05.2012 / 01:20