Como executar um script bash?

19

Então, eu escrevi meu primeiro script bash:

#!/bin/bash
echo 'hello world!'
exit

Eu sei que ele tem o local certo para bater e é executável:

$ which bash
/bin/bash
$ chmod +x myscript.sh

Agora eu quero executá-lo na linha de comando, mas recebo um erro:

$ myscript.sh
myscript.sh: command not found

Então, em vez disso, eu tento isso e funciona:

$ bash myscript.sh
hello world!

É assim que eu sempre precisarei executá-lo? Sinto como se tivesse executado outros scripts sem ter que precedê-lo combash . Como posso executar o myscript.sh sem precisar preceder bash?

Atualização: Aqui está uma boa explicação de por que e como executar um script bash .

Andrew
fonte

Respostas:

28

Você precisa tornar o arquivo executável. Você pode fazer isso com

chmod +x <filename>

onde está o nome do seu script e você deve anexá-lo previamente ./para instruir o shell a executar um arquivo no diretório local, como:

./script.sh

Você só pode executar arquivos que estão no seu PATHou que você especificar um caminho para eles. ./, o diretório local, não está no PATHpadrão por que alguém pode usá-lo para fins nefastos. Imagine um script chamado lssolto em um diretório, você entra nesse diretório, executa lse esse script faz algo ruim.

Enquanto você está nisso, você pode torná-lo mais portátil executando o shell em vez do bash usando:

#!/bin/sh

ou executando o bash, não importa onde esteja instalado, desde que esteja instalado:

#!/usr/bin/env bash
pupeno
fonte
Eu já fiz isso com chmod + x myscript.sh. Eu fiz errado?
Andrew
1
Você provavelmente está desaparecido ./ Adicionei à resposta.
pupeno
1

Além do conselho de Fernández, anteceda-o com um ponto, como este:

./myscript.sh

Por motivos de segurança, o diretório atual nunca é incluído no caminho de execução.

harrymc
fonte
1

Existem três maneiras de executar o script bash. Com o exemplo myscript.sh como o script que você deseja executar.

Método 1

execute o script como um subprocesso, que acionará problemas de permissão, se não o proprietário da gravação. Você pode alterar as permissões pelo chmod.

$ chmod + x myscript.sh

$ ./myscript.sh

Método 2

execute o script como um usuário atual. se o script bash estiver bem escrito, não deverá ter erros.

$ bash myscript.sh

Método 3

semelhante ao método 2, mas um atalho. observe que isso se baseia na suposição de que você está usando o bash shell na sessão atual.

$. myscript.sh

espero que isto ajude!:)

Jimmy MG Lim
fonte