Como executar um script bash?

18

Então escrevi meu primeiro script bash:

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

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

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

Agora quero executá-lo a partir da linha de comando, mas recebo um erro:

$ myscript.sh
myscript.sh: command not found

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

$ bash myscript.sh
hello world!

É assim que eu sempre precisarei executá-lo? Eu sinto como se tivesse executado outros scripts sem ter que preceder com bash . Como posso executar myscript.sh sem precisar preceder com bash ?

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

    
por Andrew 12.12.2009 / 20:26

3 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, em seguida, você deve prefixar com ./ para instruir o shell a executar um arquivo no diretório local, como:

./script.sh

Você só pode executar arquivos que estejam no seu PATH ou que você especifique um caminho para eles. ./ , o diretório local, não está no PATH por padrão porque alguém pode usá-lo para fins nefastos. Imagine um script chamado ls descartado em um diretório, você entra nesse diretório, executa ls e esse script faz algo ruim.

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

#!/bin/sh

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

#!/usr/bin/env bash
    
por 12.12.2009 / 20:27
1

Além do conselho de Fernández, preceda-o com um ponto assim:

./myscript.sh

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

    
por 12.12.2009 / 20:30
1

Existem 3 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 por 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á haver erros.

$ bash myscript.sh

Método 3

semelhante ao método 2, mas um atalho

$ . myscript

espero que isso ajude!:)

    
por 05.04.2016 / 07:55