Por que usamos ./filename
para executar um arquivo no linux?
Por que não inseri-lo como outros comandos gcc
, ls
etc ...
command-line
executable
Renjith G
fonte
fonte
./command_name
para executar um comando no linux?"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 chamadofoo
que está neste diretório.Você pode usar
type
ouwhich
para obter o caminho completo de qualquer comando encontrado no seu$PATH
.fonte
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 nomeadols
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 .bashrcA 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
orls
, 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 seriatest
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, comosl
ouls-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.fonte
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:
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 chamadols
que encontra. Se você digitar: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:
fonte
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.fonte