Ligações

Ligações

Estou escrevendo um aplicativo a partir do qual desejo executar um pager especificado pelo usuário. A maneira padrão de fazer isso parece ser observar a PAGERvariável de ambiente.

Não estou certo se este é um nome de programa ou um nome de programa junto com argumentos. Tentei encontrar padrões mencionando isso, mas não consegui.

Meu pressentimento é que devo dividir os espaços e executar. Estou correcto? Encontrei vários programas que assumem variáveis ​​de ambiente como $PAGERe $EDITORsão nomes de programas sem variáveis ​​de ambiente.

Talvez eu deva executar with shem vez disso?

Ligações

Responder1

Meu pressentimento é que devo dividir os espaços e executar.

Bons instintos. Você está ligandoexecutivo(3); cabe a você interpretar as variáveis ​​de ambiente que você suporta. Ao oferecer suporte a opções, você evita ao usuário o trabalho de escrever um script para colocá-las em um único nome $PAGER.

Um bom exemplo a seguir pode serhomem(1). No meu sistema, ele suporta MANPAGER, que diz:

Se MANPAGER estiver definido, seu valor será usado como o nome do programa a ser usado para exibir a página do manual. Caso contrário, PAGER será usado. Se isso também não tem valor,/usr/bin/menos -éé usado.

Isso pelo menos implica que PAGER pode conter opções. Você pode experimentar o seu para ver. Aposto que sim.

Não acho que o Posix resolva a questão de como as variáveis ​​de ambiente que denotam utilitários são interpretadas. Acho que o melhor que você tem são exemplos comuns de arte anterior.

Quanto a passar ou não pelo "shell", eu diria Não, a menos que você queira aproveitar as vantagens da expansão de variáveis ​​​​do shell e documentá-la. É mais simples e previsível manter a casca fora disso.

informação relacionada