O que é um exemplo de um programa utilitário que o comando env poderia chamar?

3

Depois de dar uma olhada na página man do comando env Eu estava curioso para ver um exemplo de um programa utilitário que seria usado no uso abaixo?

SYNOPSIS

env [-i] [name=value ...] [utility [argument ...]]

DESCRIPTION

env executes utility after modifying the environment as specified on the command line. The option name=value specifies an environmental variable, name, with a value of value. The option '-i' causes env to completely ignore the environment it inherits.

    
por MrDaniel 06.03.2012 / 20:31

2 respostas

5

Um uso comum é o lançamento de intérpretes, fazendo uso do fato de que env pesquisará o $ PATH para o comando que é solicitado a ser iniciado. Já que a linha shebang requer um caminho absoluto a ser especificado, e desde a localização de vários intérpretes ( perl , bash , python ) pode variar muito , é comum usar:

#!/usr/bin/env perl

em vez de tentar adivinhar se é /bin/perl , /usr/bin/perl , /usr/local/bin/perl , /usr/local/pkg/perl , /fileserver/usr/bin/perl ou /home/MrDaniel/usr/bin/perl no sistema do usuário ...

Por outro lado, env está quase sempre em /usr/bin/env . (Exceto nos casos em que não é; alguns sistemas podem usar /bin/env , mas essa é uma ocasião bastante rara e só acontece em sistemas não-Linux.)

Outro uso é limpar rapidamente o ambiente usando a opção -i . Em initscripts legados do sysvinit , que são apenas scripts de shell geralmente iniciados diretamente pelo administrador de sistemas, é necessário certificar-se de que o ambiente do administrador não se propaga para o daemon iniciado. (Por exemplo, um rogue $TZ ou $HOME pode tornar as coisas realmente confusas - especialmente com certos daemons do cron).

Neste caso, o initscript prepara um ambiente curto e inicia o daemon usando algo como:

env -i "PATH=/bin:/usr/bin" "LANG=$system_locale" /usr/sbin/crond
    
por 06.03.2012 / 20:46
1

É realmente qualquer programa. É mais útil para todos aqueles que usam qualquer valor definido como variável de ambiente. Você pode passar um valor de variável de ambiente para qualquer programa sem realmente configurá-lo em seu shell (e, assim, influenciar outros programas no final da linha).

env ls executa ls sem modificar o ambiente. env -i ls redefine o ambiente. No meu sistema, isso remove as cores de sua saída, uma vez que desativa LSCOLORS e CLICOLOR . env LSCOLORS=GxfxcxhxdxegdggbgdAhAg ls executará ls , passando a string LSCOLORS especificada e possivelmente alterando a forma como a saída ls é colorida.

    
por 06.03.2012 / 20:33