Eu tenho um hello_world.c
arquivo simples daqui . Eu descobri como fazer.
gcc -Wall -g hello_world.c -o hello
está funcionando, no entanto, se eu executar bash hello
, há um erro:hello: hello: cannot execute binary file
sh hello
então erro: hello: 1: Syntax error: "(" unexpected
./hello
imprime a linha esperada.
Achei que os três fossem iguais. Pelo resultado não é. Por que os outros dois não estão funcionando? Exceto ./hello
, existe alguma outra maneira de invocar o arquivo hello
?
Nas duas primeiras tentativas,
bash hello
esh hello
, você está tentando convencer esses shells (bash
esh
respectivamente) de que ohello
arquivo é um executável do shell. Como é um binário, os shells não sabem como lidar com o comando para executá-lo, então eles fornecem essas mensagens de erro. No terceiro exemplo, você está executando ohello
binário como um binário, da maneira que um shell espera que seja executado. O./
é simplesmente um indicador de onde o binário pode ser encontrado - no diretório atual (.
). Por que você precisa do./
? Na maioria das vezes, o "diretório de trabalho atual" não faz parte da$PATH
variável, portanto, simplesmente executarhello
não encontraria o executável em nenhum lugar.Por que usamos ./ (ponto barra) para executar scripts Linux?
A sintaxe do script Unix ./ pode ser explicada em três partes:
O papel da aplicação PATH no Linux A notação ./ denota o diretório atual A necessidade de evitar conflitos com comandos existentes
O ponto barra do Unix versus o PATH Todo computador tem um aplicativo PATH. Esta é uma coleção de diretórios em que o sistema operacional procura quando um comando executável ou script executável é invocado.
Todos os comandos internos com os quais você está familiarizado, como ls, cat, echo, touch e chmod, estão no aplicativo PATH. Os usuários geralmente colocam os programas comumente usados no JDK ou Git no PATH do aplicativo também.
O problema é que, se você estiver tentando invocar um script que você mesmo escreveu, provavelmente ele não será salvo em uma pasta que faça parte do PATH do aplicativo. Isso significa que se você executar seu script personalizado como faria com um comando que reside no PATH, o sistema operacional Linux não o encontrará.
Significado de ./ no Linux É aqui que entra a notação ponto e barra ./. Significa “Procure no diretório atual”. Quando você usa ./, você diz ao Ubuntu ou Fedora ou SUSE ou qualquer distribuição Linux que esteja usando para procurar no diretório atual o comando que deseja executar e ignora completamente o que está no aplicativo PAT