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, ./foosignifica executar o executável chamado fooque está neste diretório.
Você pode usar typeou whichpara obter o caminho completo de qualquer comando encontrado no seu $PATH.
aliases que podem atrapalhar, não apenas $PATH.
.primeiro, então seria um problema de segurança, você ou outra pessoa poderia substituir, lspor exemplo (um simples vírus / trojen: crie um arquivo zip com um executável nomeado lsnele, 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 gccor 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 testou [, 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 slou ls-l. Ou encontre um comando comum que não está instalado nesse sistema - vimpor exemplo, pois os administradores de sistemas têm probabilidade acima da média de digitar isso.
PATHvariá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 lsnos diretórios em sua variável de ambiente PATH ( echo $PATHpara vê-lo) e executa o primeiro executável chamado lsque 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 -lApara 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/environmentse 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
.somethingseria 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_namepara executar um comando no linux?"