Arquivos .sh requerem `sh app.sh` mesmo com a linha `#!/bin/bash`

Arquivos .sh requerem `sh app.sh` mesmo com a linha `#!/bin/bash`

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.shdá algo como test.shgive 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/bashcom

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 shagir 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.

informação relacionada