Respostas:
No Linux, UNIX e sistemas operacionais relacionados, .
denota o diretório atual. Como você deseja executar um arquivo no seu diretório atual e esse diretório não estiver no seu $PATH
, você precisa ./
informar o shell onde está o executável. Então, ./foo
significa executar o executável chamado foo
que está neste diretório.
Você pode usar type
ou which
para obter o caminho completo de qualquer comando encontrado no seu $PATH
.
alias
es que podem atrapalhar, não apenas $PATH
.
.
primeiro, então seria um problema de segurança, você ou outra pessoa poderia substituir, ls
por exemplo (um simples vírus / trojen: crie um arquivo zip com um executável nomeado ls
nele, pois alguém está pesquisando , eles executam este executável, que…). Se ele pesquisou pela .
última vez, você pode passar um longo tempo enlouquecendo sem saber por que seu programa não está funcionando (por exemplo, você faz um programa chamado teste, em vez de executá-lo, ele executa o programa de teste do sistema. O que não produz saída).
export PATH="$PATH:."
para executar o comando no diretório atual se não for encontrado em outras partes PATH, você pode adicionar este em seu arquivo .bashrc
A resposta literal é a que outros deram: porque o diretório atual não está no seu $PATH
.
Mas porque? Em suma, é por segurança. Se você está procurando no diretório pessoal de outra pessoa (ou / tmp) e digitando just gcc
or ls
, deseja saber que está executando o real, não uma versão maliciosa que seu amigo brincalhão escreveu que apaga todos os seus arquivos. Outro exemplo seria test
ou [
, que pode substituir esses comandos nos scripts do shell, se o seu shell não os possuir como embutidos.
Ter .
como última entrada no seu caminho é um pouco mais seguro, mas existem outros ataques que fazem uso disso. Uma solução fácil é explorar erros de digitação comuns, como sl
ou ls-l
. Ou encontre um comando comum que não está instalado nesse sistema - vim
por exemplo, pois os administradores de sistemas têm probabilidade acima da média de digitar isso.
PATH
variável de ambiente.
Se você quer dizer, por que você precisa de ./ no início - é porque (diferente do Windows), o diretório atual não faz parte do seu caminho por padrão. Se você executar:
$ ls
seu shell procura ls
nos diretórios em sua variável de ambiente PATH ( echo $PATH
para vê-lo) e executa o primeiro executável chamado ls
que encontra. Se você digitar:
$ a.out
o shell fará o mesmo - mas provavelmente não encontrará um executável chamado a.out. Você precisa informar ao shell onde está o a.out - ele está no diretório atual (.) E o caminho é ./a.out
.
Se você está perguntando por que é chamado "a.out", esse é apenas o nome do arquivo de saída padrão para o gcc. Você pode alterá-lo com a linha de comando -o arg. Por exemplo:
$ gcc test.c -o test
$ ./test
touch .a.out; ls -lA
para ver isso.)
<dir>/<file>
então você está basicamente dizendo para executar um arquivo no diretório atual, indicado por./test
Você pode tentar adicionar :.
à sua variável $ PATH.
Tente ALT + F2 e digite: gksudo gedit /etc/environment
se estiver executando Linux / GTK (é o que você tem se estiver usando o Ubuntu).
No entanto, eu recomendo fortemente que você não faça isso. É ruim, ruim, ruim e ruim.
Você sabe, esse tipo de coisa funciona assim desde 1970. Há uma razão pela qual o diretório atual não está incluído no $ PATH.
.
é o diretório atual
.something
seria um arquivo oculto (digite "ALT +" para fazê-los aparecer no Nautilus ou tente " ls -la
".
./someProgram.sh
é o que você digita para EXECUTAR um executável someProgram.sh no diretório atual.
.somethingElse
significaria que você tem um executável oculto no diretório atual, o que é uma má ideia.
./command_name
para executar um comando no linux?"