Por que eu sou capaz de executar um programa que não está na minha variável de ambiente PATH?

9

Eu estava me perguntando por que o comando java -version é globalmente acessível?

Eu poderia executá-lo em qualquer diretório e seu funcionamento:

Como funciona?

Esta é a aparência da variável PATH do sistema:

C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

Quanto a mim, java.exe está localizado em %programfiles%\java\jre7\bin

    
por Pacerier 09.01.2012 / 16:09

4 respostas

13

Normalmente, há um grupo de diretórios onde os arquivos executáveis que são usados repetidamente são encontrados pelo seu Windows, mas na prática não há razão específica para usar um comando como global ou não. Os desenvolvedores costumavam incluí-lo como "global" onde quer que quisessem, eles são livres para fazê-lo. Se você quiser usar qualquer comando como "global", precisará adicionar seu comando como "Windows Enviroment Variable" . Para fazer isso, você pode usar os seguintes métodos :

  1. Adicionando manualmente com "Propriedades do sistema Windows":

  2. UsandoaferramentadecomplementoSetx.exe:

NãofazpartedaconfiguraçãopadrãodoWindowsXP,masumaferramentadelinhadecomandochamadasetx.exeestáincluídanasFerramentasdeSuportedoWindowsXPServicePack2.Essaferramentaestendeocomandosetparaquealteraçõespermanentesnasvariáveisdeambientepossamserfeitas.Porexemplo,paraadicionarumapastaC:\NewFolderaocaminho,ocomandoseria

setxpath"%PATH%;C:\New Folder" 
  1. Scripts para variáveis de ambiente de listagem:

O comando "Set" pode ser usado em um prompt de comando junto com um redirecionamento para um arquivo de texto para fazer uma lista das variáveis de ambiente atuais. O comando pode ser

set > C:\env_list.txt 

O nome do arquivo "C: \ env_list.txt" pode ser substituído por qualquer um de sua escolha.

A Microsoft também tem um VBScript que lista variáveis de ambiente em esta página .

  1. Chaves de registro para variáveis de ambiente:

Para quem tem experiência em editar o Registro, existe outra maneira de fazer alterações nas variáveis de ambiente. As variáveis de ambiente do usuário são armazenadas no registro na chave:

HKEY_CURRENT_USER\Environment

Variáveis do sistema são encontradas na chave:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Observe que qualquer variável de ambiente que esteja no formulário que precisa ser expandida (por exemplo,% PATH%) deve ser armazenada no Registro como um valor de registro REG_EXPAND_SZ. A edição do Registro é principalmente para scripts usados por administradores de sistemas e não é recomendada para o usuário médio do PC.

Você pode encontrar mais informações sobre aqui

    
por 09.01.2012 / 16:40
5

"Comandos globais" são determinados por suas variáveis de ambiente.

Dependendo de qual sistema operacional você está usando, é bastante diferente.

A maneira mais genérica é por

Clique com o botão direito do mouse em "Meu computador" Selecione "Propriedades"

No Windows7, você terá que selecionar "Configurações avançadas do sistema" no painel à esquerda.

Quando você abrir a caixa de diálogo Propriedades do sistema, selecione a guia "Avançado".

Na parte inferior, há um botão "Variáveis de ambiente"

No Diálogo de Variáveis de Ambiente, você poderá configurar variáveis ambientais por usuário ou por todo o sistema.

Por exemplo, o "Caminho" da Variável do Sistema simplificado seria parecido com isto ...

C: \ Arquivos de programas \ Java \ jre6 \ bin ; C: \ Ruby19 \ bin;

Os executáveis nesses caminhos podem ser chamados diretamente da linha de comando.

O motivo pelo qual você pode chamar calc, mspaint, cmd, todos da caixa de diálogo Run, é porque C: \ windows \ system32 está na variável de ambiente Path.

Você pode adicionar caminhos personalizados às variáveis ambientais, tomando cuidado para não substituir o existente e separar os caminhos usando um ponto e vírgula. ";"

Você pode então executar um executável a partir desse caminho diretamente na linha de comando sem digitar o caminho inteiro, como o comando java -version.

Para mais informações, consulte os seguintes links ...

Variáveis de ambiente

Compreender e configurar variáveis de ambiente

    
por 09.01.2012 / 16:46
3

Aqui está um simples which que exibe todos os acessos de comando no PATH para as extensões atuais do PATHEXT:

@for %%I in ("%path:;=\" "%") do @for %%E in (%pathext:;= %) do @if exist "%%~dpI%1%%E" @echo %%~dpI%1%%E

Coloque isso em where.cmd (permitindo que which venha de outro lugar se você o obtiver!) e chame-o com where java .

Agora, no meu comentário acima, sugeri que, se java não aparecer no seu PATH , você poderá fazer check-in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths [ref] , mas depois de realmente tentar isso, ele não funciona com a linha de comando , apenas com itens que usam ShellExecuteEx , como Iniciar execução e o comando start CLI.

    
por 10.01.2012 / 07:07
2

Quando você insere um comando, o shell verifica uma variável de ambiente chamada PATH (% PATH%, $ PATH dependendo do sistema operacional). Ele consulta todos os diretórios no PATH para ver se ele encontra um executável que corresponda ao comando digitado. O primeiro que encontrar será executado.

Veja outras respostas para algumas das várias maneiras de definir a variável PATH.

    
por 09.01.2012 / 19:50