Questão O que são PATH e outras variáveis ​​de ambiente e como posso defini-las ou usá-las?


Perguntas sobre

  • configurando variáveis ​​de ambiente
  • a PATH

são muito comuns aqui e, na maioria dos casos, as respostas são muito semelhantes entre si. No futuro, seria bom ter um bom Q / A para isso.

Então a questão é: Quais são as variáveis ​​de ambiente, como o executável PATHe como posso alterá-los e usá-los nos principais sistemas operacionais?

Uma boa resposta incluiria uma explicação simples de quais variáveis ​​de ambiente e especialmente PATH significa para o sistema operacional, bem como orientações simples sobre como configurá-los e lê-los adequadamente.


315


origem


Cansado de ter que fazer isso manualmente cada vez que eu precisava, eu escrevi algumas entradas de registro para adicionar entradas de menu de contexto para AddToPath e RemoveFromPath para pastas, utilizando um aplicativo gratuito chamado pathed.exe. A seguir, o link para o guia completo: addictivetips.com/windows-tips/… Agora posso adicionar pastas facilmente à variável PATH ou removê-las, sem ter que editar nenhum arquivo ou me preocupar em alterar a formatação da variável. Espero que ajude. =) - Haroon Q. Raja
No Windows há um atalho para abrir as propriedades do sistema, ou seja. Painel de Controle -> Sistema É a tecla WIN no teclado + Pausa / Pausa (WIN + Break). Isso é extremamente útil e acelera o processo de configuração de novas variáveis ​​ambientais no Win8 porque você tem que clicar em várias janelas na interface ui moderna (Sim. Se é moderno, então eu desenvolvo um cacto na palma da minha mão) que é irritante. Claro que você pode criar script powershell ou usar o comando setx e não se preocupe mais com isso: D - termil0r
No Windows 8, a navegação mais rápida para alterar as variáveis ​​do ambiente do sistema e do usuário está usando a pesquisa. <kbd> Win </ kbd> + <kbd> W </ kbd> abre a busca por todas as configurações. Procurar por enve as opções necessárias estão listadas. - FRIdSUN
Eu acho que é mais rápido e claro abrindo CMD e digitando setou PowerShell e digitando Get-Childitem env:. - paradroid
Se você estiver editando muito a variável path (como ao configurar um novo sistema), pode ser útil ter um atalho para a caixa de diálogo Propriedades do Sistema na área de trabalho. Para fazer isso, clique com o botão direito do mouse na área de trabalho, selecione Novo atalho e digite systempropertiesadvanced.exe. Em seguida, você pode clicar no link para acessar a caixa de diálogo Propriedades do sistema e clicar em Variáveis ​​de ambiente para acessar a caixa de diálogo com as configurações do caminho. - Brian Burns


Respostas:


O que são variáveis ​​de ambiente?

As variáveis ​​de ambiente mantêm valores relacionados ao ambiente atual, como o sistema operacional ou as sessões do usuário.

Caminho

Um dos mais conhecidos é chamado PATH no Windows, Linux e Mac OS X. Ele especifica os diretórios nos quais os programas executáveis ​​* estão localizados na máquina que pode ser iniciada sem conhecer e digitar todo o caminho para o arquivo na linha de comando. (Ou no Windows, o Corre diálogo no menu Iniciar ou Win+R).

No Linux e Mac OS X, geralmente é bin e sbin diretórios relevantes para o usuário atual. No Windows, ele contém pelo menos C:\Windows e C:\Windows\system32 diretórios - é por isso que você pode corre  calc.exe ou notepad.exe da linha de comando ou Corre diálogo, mas não firefox.exe. (O Firefox está localizado em C:\Program Files\Mozilla Firefox. Para obter informações sobre como incluir o Firefox, vá Aqui.)

Por exemplo, digitando calc (a .exe  posso ser omitido) na linha de comando no Windows iniciará a Calculadora do Windows.

* Você pode adicionar suporte a extensões de arquivos que não sejam .exe editando %PATHEXT%.

De outros

Outras variáveis ​​podem dizer aos programas que tipo de terminal é usado (TERM no Linux / Mac OS X) ou, no Windows, onde a pasta do Windows está localizada (por exemplo, %WINDIR% é C:\Windows).

Criando novas variáveis ​​de ambiente

No Windows, Linux e Unix, é possível criar novas variáveis ​​de ambiente, cujos valores são disponibilizados para todos os programas no lançamento.

Você pode usar isso ao escrever scripts ou programas instalados ou implementados em várias máquinas e precisar referenciar valores específicos dessas máquinas. Embora um efeito semelhante possa ser obtido usando configurações específicas do programa, é mais fácil fazer isso usando uma variável de ambiente se vários programas precisarem acessar o mesmo valor.

janelas

GUI

  1. Aberto Control Panel » System » Advanced » Environment Variables.

  2. Tipo control sysdm.cpl,,3 na caixa de diálogo Executar (Win+R) e clique Environment Variables.
    Para editar variáveis ​​de usuário, você também pode digitar

    %windir%\System32\rundll32.exe sysdm.cpl,EditEnvironmentVariables
    

    na caixa de diálogo Executar.

  3. Clique com o botão direito em (Meu) Computador e clique em Propriedades, ou simplesmente pressione Win+Pausa.

    • No XP, clique em Advanced » Environment Variables.
    • No Vista + clique em Advanced system settings » Environment Variables.
  4. Há muitas outras maneiras de chegar ao mesmo lugar, como digitar "variáveis ​​de ambiente" na caixa de pesquisa do menu Iniciar / Tela e assim por diante.

As variáveis ​​de ambiente no Windows são separadas em valores específicos do usuário e do sistema / máquina. Você pode ver e editar seus valores lá. Seus valores atuais no lançamento são disponibilizados para todos os programas.

Há também Editor Rápido de Ambiente, que ajuda a definir e alterar variáveis ​​de ambiente no Windows sem a necessidade de aprofundar as configurações do sistema. Outro programa de código aberto para Windows com o qual o ambiente de caminho pode ser editado de forma muito conveniente é Editor de caminhos.

Linha de comando

Formato

As variáveis ​​de ambiente no Windows são indicadas por sinais de porcentagem (%) em torno do nome:

%name%

eco

Para exibir o valor de uma variável de ambiente cmd.exe, tipo echo %name%.

C:\>echo %USERPROFILE%
C:\Users\Daniel

conjunto

Para criar / definir uma variável, use set varname=value:

C:\>set FunnyCatPictures=C:\Users\Daniel\Pictures\Funny Cat Pictures

C:\>set FunnyCatPicturesTwo=%USERPROFILE%\Pictures\Funny Cat Pictures 2

Para acrescentar / adicionar uma variável, use set varname=value;%varname%:

C:\>set Penguins=C:\Linux

C:\>set Penguins=C:\Windows;%Penguins%

C:\>echo %Penguins%
C:\Windows;C:\Linux

As variáveis ​​de ambiente definidas dessa maneira estão disponíveis para (o restante) a duração do processo do Prompt de Comando no qual eles estão definidos, e estão disponíveis para processos iniciados depois que as variáveis ​​foram definidas.

setx

Para criar / definir uma variável permanentemente, usar setx varname "value":

C:\>setx FunnyCatPictures "C:\Users\Daniel\Pictures\Funny Cat Pictures"

[Restart CMD]

C:\>echo %FunnyCatPictures%
C:\Users\Daniel\Pictures\Funny Cat Pictures

Ao contrário set, não há sinal de igual e o valor deve ser colocado entre aspas se contiver espaços. Observe que as variáveis ​​podem se expandir para uma string com espaços (por exemplo, %PATH% torna-se C:\Program Files), por isso é melhor incluir cotações em torno de valores que contenham quaisquer variáveis.

Você deve adicionar manualmente setx para versões do Windows anteriores ao Vista.
Ferramentas de suporte do Windows XP Service Pack 2

Lista de variáveis ​​de ambiente do Windows

Aqui é uma lista de variáveis ​​de ambiente padrão, que são construídos no Windows. Alguns exemplos são: %WINDIR%, %SystemRoot%, %USERPROFILE%e %APPDATA%. Como a maioria dos nomes no Windows, eles não diferenciam maiúsculas de minúsculas.

Derivadas Unix (FreeBSD, GNU / Linux, OS X)

Variáveis ​​de Ambiente no Linux são prefixadas com um sinal de dólar ($) como $ HOME ou $ HOSTNAME. Muitas variáveis ​​conhecidas e padronizadas são escritas em maiúsculas para significar exatamente isso. Lembre-se de que os nomes das variáveis ​​fazem distinção entre maiúsculas e minúsculas, o que significa que $ User e $ USER não são totalmente relacionados do ponto de vista do shell.

Derivadas Unix definem variáveis ​​do sistema em scripts de shell localizados principalmente na /etc pasta, mas valores específicos do usuário podem ser dados a essas variáveis ​​em scripts localizados na pasta base (por exemplo, /etc/profile, $HOME/.bash_profile). o .profile O arquivo na pasta inicial é um local comum para definir as variáveis ​​do usuário.

Configurando Variáveis

Esses arquivos são scripts de shell regulares e podem conter mais do que apenas declarações de variáveis ​​de ambiente. Para definir uma variável de ambiente, use export. Para mostrar suas variáveis ​​de ambiente atualmente definidas em um terminal, execute env.

o export comando é uma maneira padrão de definir variáveis. A sintaxe é muito intuitiva. O resultado é idêntico para estas duas linhas, mas a primeira alternativa é preferível no caso de ser necessário portabilidade para o Bourne pré-POSIX shell.

var=value; export var
export var=value

O shell C e seus descendentes usam uma sintaxe completamente diferente; lá, o comando é setenv.

Veja o projeto de documentação do Linux, COMO FAZER para uma discussão mais aprofundada sobre este tópico.

Talvez contrário à crença comum, o OS X é mais "Unix" que o Linux. Além dos arquivos já mencionados, $ PATH pode ser modificado nestes arquivos:

  • /etc/paths contém todos os diretórios padrão que são adicionados ao caminho, como /bin e /usr/sbin.
  • Qualquer arquivo em /etc/paths.d - comumente usado pelos instaladores para disponibilizar os arquivos executáveis ​​que eles disponibilizam a partir do shell sem tocar nos arquivos de configuração de todo o sistema ou específicos do usuário. Esses arquivos simplesmente contêm um caminho por linha. por exemplo, / Programs / Mozilla / Calendar / bin.

Links externos:

Variáveis ​​de ambiente no XP
Ferramentas de suporte do Windows XP Service Pack 2 (Inclui setx)
Variáveis ​​de ambiente no Windows Vista e no Windows 7
Adicionando executáveis ​​à caixa de diálogo Executar
Dicas do Mac OSX - Configurando Variáveis ​​de Ambiente
TLDP: Howto de caminho


308



No Windows Vista em diante, você pode usar SETX fazer alterações permanentes. Tem uma sintaxe ligeiramente diferente. SETX tem que ser adicionado a partir do Windows Server 2003 Resource Kit para versões anteriores de NT. - paradroid
@paradroid Nice, não sabia disso (não é um usuário do Windows). Este tópico é wiki da comunidade, você pode prosseguir e editar apenas essas informações. - Daniel Beck♦
@ JdeBP O título da seção foi feito para referência como definir esses valores na interface do usuário, que é chamado Concha no Windows, em contraste com a seção seguinte, interface da Linha de comando. Eu editei isso antes mesmo de ver seu comentário 10 horas atrás. Ninguém mencionou que isso se aplica apenas ao Explorer. - Daniel Beck♦
@JdeBP A resposta que você vinculou realmente não se aplica neste caso, já que você falou sobre a configuração dos valores no registro. A configuração via diálogo transmitirá isso WM_SETTINGCHANGE Eu imagino e, portanto, notifico as partes interessadas sobre os novos valores. É por isso que perguntei como isso se aplicava aqui. Fazer algo em negrito não muda seu significado e nem facilita a compreensão, como repetir a mesma frase, apenas mais alto. Além disso, eu editei este post há algumas horas para mencionar especificamente que os valores que os processos recebem são definidos quando são lançados. - Daniel Beck♦
@JdeBP Você também pode perceber que a questão é bastante básica por natureza. Explicando cuidadosamente as complexidades de como as mudanças nas variáveis ​​de ambiente são distribuídas (seriamente, WM_SETTINGCHANGE? API do Windows? Esta não é a audiência desta questão!) Pode não ser uma boa ideia, pois pode confundir o leitor em vez de explicar de que são estas variáveis. - Daniel Beck♦


Este post é de um ponto de vista mais técnico do que o de Daniel, mas não explica tanto os conceitos.


o Artigo da Wikipédia é também uma excelente referência.

Linux e a maioria dos BSDs

Na maioria dos shells de linha de comando, as variáveis ​​de ambiente temporárias são definidas usando export (sh, bash, zsh) ou setenv (csh, tcsh) comandos.

  • Exemplos para prepending $HOME/bin para $PATH em bash ou zsh:

    export PATH="$HOME/bin:$PATH"
    

    (Neste caso particular, export é desnecessário desde PATH já faz parte do ambiente.)

  • csh, tcsh:

    setenv PATH "$HOME/bin:$PATH"
    

Variáveis ​​de ambiente persistentes podem ser definidas durante vários estágios separados:

  • Entrar:

    • Configuração da sessão de login: Linux pam_env, que geralmente lê de /etc/environment

    • Logins de terminal: os arquivos de "perfil" do shell.

      • bash usa /etc/profile e o primeiro de: ~/.bash_profile, ~/.bash_login, ~/.profile. Página de manual bash(1) seção Invocação.

        Muitas vezes, o arquivo de perfil do usuário inclui uma chamada explícita para ~/.bashrc também.

      • zsh: Página do manual zsh(1) seção Arquivos de inicialização / desligamento.

      • csh e outros shells: Veja páginas de manual apropriadas.

    • Logins gráficos: não tenho certeza; pode variar dependendo do gerenciador de login. GDM parece ler ~/.profile no meu sistema.

  • Abertura de uma janela de terminal:

    • bash usa /etc/bash.bashrc e ~/.bashrc.

Série do Windows NT

  • Em Prompt de Comando (cmd.exe), usar set name=value para alterar variáveis ​​de ambiente para essa janela.

    Para anexar c:\bin para %PATH%, usar:

    set path=%path%;c:\bin
    

    Isso afeta apenas cmd.exe processo, e qualquer Novo processos lançados a partir dele.

  • Para fazer alterações persistentes, use Painel de Controle → Sistema → Avançado → Variáveis ​​de Ambiente. (docs)

    Nota: Enquanto as configurações do usuário normalmente substituem as do sistema, PATH A variável é tratada especialmente: as configurações do sistema e do usuário são mescladas no valor final.

    As alterações são armazenadas no Registro (veja abaixo) e aplicadas instantaneamente a todos os usuários. Novo processos criados pelo Explorer (o shell gráfico), por exemplo, através do Menu Iniciar.

  • Variáveis ​​de ambiente de todo o sistema são mantidas no Registro, HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environmente carregado na inicialização do sistema.

    Ambiente do usuário é mantido em HKCU\Environment e carregado durante o logon do usuário.

  • Por padrão, o sistema também procura set comandos em AUTOEXEC.NT Arquivo.

MS-DOS, Windows de 16 bits, série Windows 9x

  • No prompt do MS-DOS (command.com), usar set name=value, como no WinNT.

    Da mesma forma, executando set interativamente afeta apenas aquele command.com exemplo, juntamente com quaisquer novos processos lançados a partir dele.

  • Para fazer alterações persistentes, adicione ou edite set linhas em C:\AUTOEXEC.BATe reinicie.

    • Solução alternativa para evitar a reinicialização, para o Windows 9x: abra uma janela do Prompt do MS-DOS, defina as variáveis ​​apropriadas, feche o processo do Explorer existente (Iniciar → Desligar → enquanto mantém pressionadas as teclas Ctrl + Shift, clique Cancelar), corre explorer.exe na janela do prompt do MS-DOS.

VMS

(Não pude resistir.)

A DCL não tem nenhum conceito de "caminho", mas várias definições de símbolo e comando podem ser colocadas SYS$LOGIN:LOGIN.COM.


61



A seção VMS está errada. DCL tem DCL$PATH para "comandos estrangeiros automáticos". - JdeBP
@grawity, O que você quer dizer com "vms não resistiram ..."? - Pacerier


Para o bash Concha PATH variáveis ​​de ambiente globais (não-terminais), sigo a convenção usada na minha instalação do Ubuntu VM - outros shells irão variar:

Advertência: Toda a sequência de inicialização da shell, que .bashrc, .profile, etc arquivos são originados em que ordem ?, quando eu tenho que re-login para obter visibilidade para novas variáveis ​​definidas, aliases, etc ?, Qual é a diferença entre um login, interativo e não-interativo shell - eu uso crone por que quando eu faço . ~/.bashrc é minha idiota PATH variável crescendo mais e mais? são as principais questões que vêm à mente quando estou pensando em minha PATH variável.

Na verdade, eu apenas reescrevi completamente todo o meu conjunto de arquivos de inicialização do bash pegando idéias dos arquivos do esqueleto do Ubuntu e do cygwin, e aqui estão alguns dos meus sites:

  1. Exportar o PATH e outras variáveis ​​de ambiente globais (ou seja, LD_LIBRARY_PATH) variáveis ​​no .profile;
  2. Use lógica em ~/.profile fonte $HOME/.bashrc se existe;
  3. Execução da cerca do ~/.bashrc com um teste para execução interativa, saia do contrário;
  4. Coloque todos os aliases, shopt's, configuração de prompt, controle de histórico, configuração de terminal, definição de função, etc. (instalação relacionada interativa) na parte de ~/.bashrc que é protegido para ser executado somente no modo interativo;
  5. Livrar-se dos outros arquivos de inicialização bash, porque sua existência determina se o caminho de controle através .profile e .bashrc funciona como esperado. Ou seja, a menos que haja requisitos específicos para fazer o contrário, remova ~/.bash_profile E ~/.bash_login;
  6. Quando estou no prompt do bash, e preciso atualizar alguma configuração padrão, edito meu ~/.bashrc arquivo, em seguida, simplesmente fonte-lo com um . ~/.bashrc para obter essas alterações no meu shell atual.
  7. Quando eu faço uma mudança em uma variável de ambiente como PATH, Eu preciso modificar e fonte minha ~/.profile;
  8. Eu coloquei minhas chamadas para fink, port e preparei configurações específicas .profile.

São meus 2 centavos neste tópico.


8





Q:  O QUE são variáveis ​​de ambiente?

UMA: Variáveis ​​de ambiente são semelhantes às variáveis ​​em qualquer linguagem de programação. No caso do Windows, ou sistemas Unix, eles armazenam vários valores para permitir que programas e tarefas obtenham informações necessárias sobre o sistema operacional ou informações sobre o ambiente. Por exemplo:

USERPROFILE: diretório de usuários dentro do OS filesc.

MAIL: onde um email de usuários pode ser encontrado nos arquivos do sistema operacional.

P: O QUE é a variável PATH especificamente?

UMA: A variável PATH define os caminhos de diretório a serem observados quando os comandos são executados, tanto para comandos RUN quanto para chamadas internas de programas. Isso impede que um programa precise saber seu local de instalação para chamar outros processos executáveis.

Ele procura a variável PATH do Windows Environment System e testa cada local para o executável fornecido. Assim, adicionar um local à variável PATH permite que um executável seja chamado diretamente.

"Quando um comando é inserido em um shell de comando ou uma chamada de sistema é feita por um programa para executar um programa, o sistema primeiro procura o diretório de trabalho atual e então pesquisa o caminho, examinando cada diretório da esquerda para a direita" - http://en.wikipedia.org/wiki/PATH_(variable)


P: COMO adicionar um local à variável PATH?

UMA: Você precisa editar a variável string da variável PATH de Variáveis ​​de Ambiente para incluir a localização do seu executável.

Uma maneira de fazer isso a partir de (https://kb.wisc.edu/cae/page.php?id=24500) 1. Abra o menu Iniciar e clique com o botão direito em Computador. Selecione Propriedades. 2. Selecione Configurações avançadas do sistema. 3. Na guia Avançado, selecione Variáveis ​​de ambiente. 4. Selecione EDITAR ou NOVO. (para o PATH você provavelmente deseja EDITAR). 5. Adicione seu caminho de localização. exemplo: C: \ wamp \ bin \ php \ php5.5.12;

Espero que isso esclareça um pouco da confusão. Edições e comentários são bem vindos.


6