Por que preciso de ./ para que os comandos sejam executados no Mountain Lion? [duplicado]

3

Por que eu preciso de ./ para os comandos serem executados no Mountain Lion?

Por exemplo, quando usando o mysql eu tenho que digitar o terminal:

./mysql -u itsme -p

Além disso, estou criando aplicativos de linha de comando e tornando meus arquivos executáveis e tenho que executar o comando com ./ , assim ...

./myawesomeapp dothis

Eu sei que ./ significa diretório atual, mas como posso executar comandos sem ter que usá-lo?

    
por leonel 25.01.2013 / 17:44

3 respostas

6

Se você colocar o diretório com seus binários na variável de ambiente PATH , poderá chamá-los sem fornecer o caminho (ou seja, ./ )

Eu acho que você provavelmente está usando bash como seu shell (você pode verificar executando echo $SHELL ). Se esse for o caso, adicione o seguinte ao seu .bashrc

export PATH=$PATH:/whatever/path/you/want/to/add
    
por 25.01.2013 / 17:45
3

Você precisa instalar o arquivo executável em um dos diretórios listados na variável de ambiente $PATH .

echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin

Ajuste $PATH modificando seu arquivo ~/.profile .

export PATH=$PATH:/Users/me/bin

É possível renunciar a ./ sempre adicionando . a $PATH , mas isso pode ser um problema de segurança - se não em sua máquina pessoal, quando você carrega o mau hábito durante a operação de um servidor .

    
por 25.01.2013 / 17:46
1

Embora seja possível adicionar . à sua variável $ PATH, é altamente recomendável NÃO fazer isso. Se você andar em algum lugar aleatório no sistema de arquivos e digitar algo que você acha que executará um programa ( vi , emacs , ls , ps , etc), um arquivo no diretório local se tornará um candidato a ser executado. Se você é azarado, não é o programa que você quer rodar - e se você está rodando como root , é ainda pior, porque alguém pode adicionar um arquivo local ls que faz algo completamente diferente do real ls (junto com ls reais, é claro - caso contrário, seria óbvio que não é real, e o usuário começaria a investigar a situação). [1]

Em vez disso, você deve adicionar um caminho absoluto para os arquivos executáveis, por exemplo, /projects/mycurrentprojects/bin - ou "relativo a casa", por ex. ~/bin - se você quiser que o caminho funcione em TODAS as circunstâncias, é melhor usar home\mats\bin [obviamente usando o nome de usuário certo para você mesmo]. Dessa forma, somente arquivos em um conjunto de diretórios certan são aplicáveis, e não importa onde você esteja, apenas os programas que estão nesses diretórios específicos são escolhidos como "possíveis candidatos a serem executados".

[1] Sim, percebo que a ordem de pesquisa e vários outros fatores também serão importantes aqui. Mas geralmente não é uma ótima idéia adicionar "diretório atual", não importa quais objeções.

    
por 25.01.2013 / 17:54