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

341

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 umas às outras. No futuro, seria bom ter uma boa Q / A para isso.

Portanto, a pergunta é: o que são variáveis ​​de ambiente, como o executável PATH, e como posso alterá-las e usá-las nos principais sistemas operacionais?

Uma boa resposta incluiria uma explicação simples de quais variáveis ​​de ambiente são especialmente importantes PATHpara o sistema operacional, bem como diretrizes simples sobre como configurá-las e lê-las adequadamente.

slhck
fonte
2
Cansado de ter que fazer isso manualmente toda vez que precisava, escrevi algumas entradas do Registro para adicionar entradas do menu de contexto do AddToPath e RemoveFromPath às pastas, utilizando um aplicativo gratuito chamado pathed.exe. A seguir está o link para o guia completo: addictivetips.com/windows-tips/… Agora, posso adicionar pastas à variável PATH com muita facilidade ou removê-las, sem precisar editar nenhum arquivo ou me preocupar em estragar a formatação da variável . Espero que ajude. =)
Haroon Q. Raja
1
No Windows, existe um atalho para abrir propriedades do System ie. Painel de Controle -> Sistema É a tecla WIN no teclado + Pausa / Pausa (WIN + Pausa). Isso é extremamente útil e agiliza o processo de configuração de novas variáveis ​​ambientais no Win8, porque é preciso clicar em várias janelas na interface do usuário moderna (Sim. Se for moderna, plantarei um cacto na palma da mão), o que é irritante. Claro que você pode criar script do PowerShell ou use o comando setx e não se preocupe mais sobre isso: D
termil0r
No Windows 8, a navegação mais rápida para alterar as variáveis ​​do sistema e do ambiente do usuário é usando a pesquisa. <kbd> Win </kbd> + <kbd> W </kbd> exibe a pesquisa de todas as configurações. Procure enve as opções necessárias estão listadas.
FRIdSUN
Eu acho que é mais rápido e claro abrindo CMDe digitando setou PowerShelldigitando Get-Childitem env:.
paradroid
Se você estiver editando muito a variável de caminho (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 na área de trabalho, selecione Novo atalho e digite systempropertiesadvanced.exe. Em seguida, clique no link para acessar a caixa de diálogo Propriedades do sistema e clique em Variáveis ​​de ambiente para acessar a caixa de diálogo com as configurações do caminho.
9788 Brian Burns #

Respostas:

334

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 PATHno Windows, Linux e Mac OS X. Ele especifica os diretórios nos quais os programas executáveis ​​* estão localizados na máquina que podem ser iniciados sem conhecer e digitar todo o caminho do arquivo na linha de comando. . (Ou no Windows, a caixa de diálogo Executar no menu Iniciar ou Win+ R).

No Linux e Mac OS X, que normalmente mantém todos bine sbindiretórios relevantes para o usuário atual. No Windows, ele contém pelo menos os diretórios C:\Windowse C:\Windows\system32- é por isso que você pode executar calc.exe ou notepad.exena linha de comando ou na caixa de diálogo Executar , mas não firefox.exe. (O Firefox está localizado em C:\Program Files\Mozilla Firefox. Para obter informações sobre como incluir o Firefox, acesse aqui .)

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

* Você pode adicionar suporte para extensões de arquivo que não sejam .exeeditando %PATHEXT%.

De outros

Outras variáveis ​​podem dizer aos programas que tipo de terminal é usado ( TERMno 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 após o lançamento.

Você pode usar isso ao escrever scripts ou programas instalados ou implementados em várias máquinas e precisa fazer referência a valores específicos para essas máquinas. Embora um efeito semelhante possa ser alcançado usando as definições de configuração 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. Digite control sysdm.cpl,,3na caixa de diálogo Executar ( Win+ R) e clique em 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 do mouse em (Meu) Computador e clique em Propriedades, ou simplesmente pressione Win+ Break.

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

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

Há também o Rapid Environment Editor , 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 do caminho pode ser editado de maneira muito conveniente é o Editor de Caminho .

Linha de comando

Formato

As variáveis ​​de ambiente no Windows são indicadas com sinais de porcentagem (%) ao redor do nome:

%name%

eco

Para exibir o valor de uma variável de ambiente cmd.exe, digite 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 em que estão definidas e estão disponíveis para processos iniciados após as variáveis ​​terem sido definidas.

setx

Para criar / definir uma variável permanentemente , use 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 ele contiver espaços. Observe que as variáveis ​​podem se expandir para uma sequência com espaços (por exemplo, %PATH%torna-se C:\Program Files); portanto, é melhor incluir aspas em torno dos valores que contêm quaisquer variáveis.

Você deve adicionar manualmente setxàs 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 está uma lista de variáveis ​​de ambiente padrão , que são incorporadas ao 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.

 

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

As variáveis ​​de ambiente no Linux são prefixadas com um cifrão ($) como $ HOME ou $ HOSTNAME. Muitas variáveis ​​conhecidas e padrão são escritas em maiúsculas para significar exatamente isso. Lembre-se de que os nomes das variáveis ​​diferenciam maiúsculas de minúsculas, o que significa que $ User e $ USER não são totalmente relacionados do ponto de vista do shell.

Unix derivados definir variáveis globais do sistema em scripts casca localizada principalmente na /etcpasta, mas os valores específicos do utilizador pode ser dada a essas variáveis em scripts localizados na pasta de casa (por exemplo, /etc/profile, $HOME/.bash_profile). O .profilearquivo na pasta inicial é um local comum para definir variáveis ​​de usuário.

Definindo 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 definidas atualmente em um terminal, execute env.

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

var=value; export var
export var=value

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

Consulte o projeto de documentação do Linux, Path HOWTO, 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/pathscontém todos os diretórios padrão adicionados ao caminho, como /bine /usr/sbin.
  • Qualquer arquivo /etc/paths.d- normalmente usado pelos instaladores para disponibilizar os arquivos executáveis ​​que eles fornecem a partir do shell, sem tocar nos arquivos de configuração específicos do usuário ou do sistema. 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 Windows 7
Adicionando executáveis ​​à caixa de diálogo Executar
Dicas do Mac OSX - Definindo variáveis ​​de ambiente
TLDP: Caminho

Daniel Beck
fonte
10
No Windows Vista em diante, você pode usar SETXpara fazer alterações permanentes. Tem uma sintaxe um pouco diferente. SETXdeve ser adicionado a partir das Windows Server 2003 Resource Kitversões anteriores do NT.
Paradroid
1
@paradroid Nice, não sabia disso (não é um usuário do Windows). Este tópico é wiki da comunidade, você pode prosseguir e editar essas informações.
Daniel Beck
2
@JdeBP O título da seção foi feito para referenciar como definir esses valores na interface do usuário , chamada shell no Windows, em contraste com a seção a seguir, interface da linha de comandos . Eu editei isso antes mesmo de ver seu comentário 10 horas atrás. Ninguém nunca mencionou que isso se aplicava apenas ao Explorer.
Daniel Beck
1
@JdeBP A resposta que você vinculou realmente não se aplica neste caso, desde que você falou sobre a definição dos valores no registro. A configuração via caixa de diálogo transmitirá o que WM_SETTINGCHANGEimagino e, portanto, notificará as partes interessadas sobre os novos valores. Por isso perguntei como se aplicava aqui. Criar algo em negrito não muda seu significado e não facilita a compreensão, assim como repetir a mesma frase, apenas mais alto. Além disso, editei este post algumas horas atrás para mencionar especificamente que os valores que os processos recebem são definidos quando são iniciados.
Daniel Beck
3
@JdeBP Você também pode perceber que a pergunta é de natureza bastante básica. Explicar cuidadosamente os meandros de como as alterações nas variáveis ​​de ambiente são distribuídas (sério WM_SETTINGCHANGE,? API do Windows? Esta não é a audiência desta pergunta!) Pode não ser uma boa ideia, pois pode confundir o leitor em vez de explicar o que são essas variáveis. .
Daniel Beck
64

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


O artigo da Wikipedia também é uma excelente referência.

Linux e a maioria dos BSDs

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

  • Exemplos para antecedendo $HOME/bina $PATHem bash ou zsh:

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

    (Nesse caso em particular, exporté desnecessário, pois PATHjá 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:

  • Conecte-se:

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

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

      • bashusa /etc/profilee o primeiro de: ~/.bash_profile, ~/.bash_login, ~/.profile. bash(1)Seção da página do manual Invocação .

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

      • zsh: zsh(1)Seção da página manual Arquivos de inicialização / desligamento .

      • csh e outras conchas: Consulte as páginas apropriadas do manual.

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

  • Abertura de uma janela do terminal:

    • bashusa /etc/bash.bashrce ~/.bashrc.

Série Windows NT

  • No prompt de comando ( cmd.exe), use set name=valuepara alterar variáveis ​​de ambiente para essa janela.

    Para anexar c:\bina %PATH%, use:

    set path=%path%;c:\bin
    

    Isso afeta apenas esse cmd.exeprocesso e quaisquer novos 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, a PATHvariá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 se aplicam instantaneamente a todos os novos processos criados pelo Explorer (o shell gráfico), por exemplo, através do Menu Iniciar.

  • As variáveis ​​de ambiente do sistema são mantidas no Registro HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environmente carregadas na inicialização do sistema.

    O ambiente do usuário é mantido HKCU\Environmente carregado durante o logon do usuário.

  • Por padrão, o sistema também procura setcomandos no AUTOEXEC.NTarquivo.

MS-DOS, Windows de 16 bits, Windows 9x series

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

    Da mesma forma, a execução setinterativa afeta apenas essa command.cominstância, juntamente com quaisquer novos processos iniciados a partir dela.

  • Para fazer alterações persistentes, adicione ou edite setlinhas apropriadas e , em C:\AUTOEXEC.BATseguida, reinicie.

    • Solução alternativa para evitar a reinicialização, no Windows 9x: abra uma janela do prompt do MS-DOS, defina as variáveis ​​apropriadas, feche o processo existente do Explorer ( Iniciar → Desligar → enquanto pressiona Ctrl + Shift, clique em Cancelar ), execute a explorer.exepartir da janela do prompt do MS-DOS .

VMS

(Não foi possível resistir.)

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

gravidade
fonte
2
A seção VMS está incorreta. O DCL possui DCL$PATHpara " comandos estrangeiros automáticos ".
JdeBP
9

Para as variáveis ​​de ambiente global (não terminal) do bashshell PATH, sigo a convenção usada na minha instalação da VM do Ubuntu - outros shells variarão:

Advertência: O todo shell seqüência de start-up, que .bashrc, .profile, etc. arquivos são provenientes variáveis em que ordem ?, quando eu tenho que re-login para obter visibilidade para os recém-definidos, aliases, etc ?, o que é a diferença entre um login , shell interativo e não interativo - eu uso cron? e por que, quando eu faço a, . ~/.bashrcminha PATHvariável estúpida cresce cada vez mais? são as principais perguntas que vêm à mente quando penso em minha PATHvariável.

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

  1. Exporte as PATHe outras variáveis ​​globais do ambiente (ie LD_LIBRARY_PATH) variáveis ​​no .profile;
  2. Use a lógica para ~/.profilea origem, $HOME/.bashrcse existir;
  3. Cerque a execução do ~/.bashrccom um teste para execução interativa; caso contrário, saia;
  4. Coloque todos os aliases, shoptconfiguração imediata, controle de histórico, configuração do terminal, definição de função etc. (configuração relacionada interativa) na parte ~/.bashrcprotegida para executar apenas no modo interativo;
  5. Livre-se dos outros arquivos de inicialização do bash, porque a existência deles determina se o caminho de controle é executado .profilee .bashrcfunciona conforme o esperado. Ou seja, a menos que haja requisitos específicos para fazer o contrário, remova ~/.bash_profile& ~/.bash_login;
  6. Quando estou no prompt do bash e preciso atualizar algumas configurações padrão, edito meu ~/.bashrcarquivo e simplesmente o forneço com a . ~/.bashrcpara obter essas alterações no meu shell atual.
  7. Quando faço uma alteração em uma variável de ambiente como PATH, eu preciso modificar e originar meu ~/.profile;
  8. Fiz minhas chamadas para o fink, port e preparo de configurações específicas .profile.

Esses são meus 2 centavos nesse tópico.

Billy McCloskey
fonte
7

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

R: As variáveis ​​de ambiente são semelhantes às variáveis ​​em qualquer linguagem de programação. No caso de sistemas Windows ou Unix, eles estão armazenando vários valores para permitir que programas e tarefas obtenham as informações necessárias do SO ou as informações de 'Ambiente'. Por exemplo:

USERPROFILE: diretório de usuários nos arquivos do SO.

CORREIO: onde o correio de um usuário pode ser encontrado nos arquivos do SO.

P: Qual é a variável PATH especificamente?

R: A variável PATH define os caminhos do diretório para procurar 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 Sistema de Ambiente do Windows e testa cada local para o executável fornecido. Assim, adicionar um local à variável PATH permite que um executável seja chamado diretamente.

De acordo com este artigo da Wikipedia :

Quando um comando é digitado em um shell de comando ou uma chamada do sistema é feita por um programa para executar um programa, o sistema primeiro pesquisa no diretório de trabalho atual e depois no caminho, examinando cada diretório da esquerda para a direita


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

R: Você precisa editar a cadeia de variáveis ​​da variável PATH de variáveis ​​de ambiente para incluir a localização do executável.

Uma maneira de fazer isso é descrita aqui :

  1. Abra o menu Iniciar e clique com o botão direito do mouse 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 PATH, você provavelmente deseja editar).
  5. Adicione o seu caminho de localização. por exemplo:C:\wamp\bin\php\php5.5.12;

Espero que isso esclareça um pouco da confusão.

user945389
fonte