Por que preciso de um “./” antes de executar alguns scripts? [duplicado]

3

Por exemplo, instalei o java e posso executar apenas java ... , mas se eu criar um script de shell, por exemplo, tenho que executar ./script.sh .

Por que isso? O que significa o ./ ?

    
por Cheetah 23.04.2013 / 17:47

4 respostas

9

Quando um executável não está no PATH, você precisa especificar o caminho explicitamente. ./ é um especificador de caminho "relativo": "a partir daqui ( . )" não mais "( / ). Se você adicionar o diretório atual à sua variável de ambiente PATH e emitir o comando rehash , não precisará mais dele.

    
por 23.04.2013 / 17:52
3

Quando você executa um comando, o shell pesquisa a variável PATH (ou alguma tabela de hash, dependendo do shell # ) onde encontrar o executável. Mas geralmente o diretório de trabalho atual ( . ) não está incluído. Então, você precisa dizer ao shell onde encontrar o seu script, prefixando ./ como explicado por Floris.

O propósito dessa configuração padrão é que você seja salvo da execução acidental de um script (no diretório atual), que é denominado, e. rm em vez do comando esperado em /bin . Isso é especialmente crucial para o root, porque o script local pode se comportar completamente diferente como você espera!

# Eu escrevi um pouco mais sobre tabelas de hash em esta resposta .

    
por 23.04.2013 / 17:58
1

O diretório atual não está normalmente no PATH, portanto, os comandos não procurarão no diretório atual por padrão

    
por 23.04.2013 / 17:50
1

java está na sua variável $PATH , por isso é encontrado e executado. ./ diz à linha de comando para usar o arquivo em seu diretório atual que normalmente não está no PATH.

    
por 23.04.2013 / 17:52

Tags