
Tenho a impressão de que se eu incluir a linha
#!/bin/bash
no início do meu arquivo, ele será reconhecido como um script bash que posso executar apenas
file.sh
em vez de
sh file.sh
Mas no meu caso file.sh
dá algo como test.sh
give test.sh: command not found
. Por que é que?
ATUALIZAR
Percebo que preciso usar ./
. Mas pensei que iria procurar no diretório atual mesmo assim?
./test.sh
Responder1
Primeiro você precisa ter certeza de que o arquivo é executável:
chmod +x file.sh
E então para executá-lo, você precisa colocá-lo em seu PATH, ou seja, um dos diretórios de arquivos que o SO procura quando procura por arquivos para executar, que você pode encontrar com echo $PATH
, ou então você precisa digitar:
./file.sh
Em vez de apenas digitar file.sh
.
Você pode simplesmente digitar file.sh
, se estiver no seu PATH, o que eu recomendo. Um bom lugar é em ~/bin
. Crie essa pasta se ela não estiver lá e, no Ubuntu, ela será adicionada ao seu caminho quando você fizer login.
Responder2
Você precisa iniciá-lo com ./file.sh, porque o diretório atual não está no PATH.
Se isso não for suficiente, porque você perdeu, o que frabjous sugere, para chmod a+x
, você deve iniciar programas começando com um shebang #!/bin/bash
com
bash file.sh
não
sh file.sh
mesmo que sh seja um link simbólico para/bin/bash.
O shell verifica como foi invocado e pode ser invocado para sh
agir em modo compatível, portanto pode falhar ao lidar com alguns bashismos, que funcionariam se invocados como bash file.sh
.
Esse não foi o seu problema, mas pode se tornar um, se você não conhecer essas distinções sutis.