Como executo um script bash no Terminal?

108

Eu tenho um script bash como:

#!/bin/bash

echo Hello world!

Como faço para executar isso no Terminal?

Ballon
fonte
27
Ele tem permissões de execução? Experimente um chmod +x scriptnamee então ./scriptname.
diretamente de

Respostas:

49

$prompt: /path/to/scripte pressione Enter. Observe que você precisa ter certeza de que o script tem permissões de execução.

filho pródigo
fonte
1
Se você já está no /path/to diretório, por exemplo, com o cd /path/tocomando, você pode entrar ./scriptpara executar seu script. Não se esqueça, neste caso, o './' antes de 'script'
FrViPofm
120

Mais uma maneira de executá-lo (desta vez sem definir permissões de execução):

bash /path/to/scriptname
Pausado até novo aviso.
fonte
26

cd para o diretório que contém o script, ou coloque-o em uma pasta bin que está em seu $ PATH

então digite

./scriptname.sh

se no mesmo diretório ou

scriptname.sh

se estiver na pasta bin.

John Boker
fonte
9
Isso só funcionará se o script tiver o conjunto de bits de execução. Isso provavelmente precisa ser resolvido.
Bryan Oakley
./scriptname.shfunciona para mim, mas scriptname.shscriptname.sh: command not found. -rwxr-xr-xsão suas permissões.
Spikatrix de
1
O conselho para cdqualquer lugar comete outro mal-entendido comum para iniciantes. A menos que o script internamente tenha dependências que exijam sua execução em um diretório específico (como a necessidade de ler um arquivo de dados para o qual o script inexplicavelmente não oferece uma opção para apontar), você nunca deve precisar de cdnenhum lugar para executá-lo muitas vezes não vai querer.
tripleee
24

Você poderia fazer:
sh scriptname.sh

xCra2yx
fonte
6
Downvote: Isso está errado se for um script Bash propriamente dito.
tripleee
1
Voto positivo: Isso é bom no Mac OS X se o seu script bash estiver no mesmo diretório
Karl Taylor
30
@kot "Acontece que funciona para mim" está muito longe de "esta é uma resposta correta". Ele pode funcionar se shé um link simbólico para bash, ou se o script não usa qualquer construção específicas do Bash. No primeiro caso, usar em bashvez de shé a única solução correta e portátil; no último caso, não é a resposta correta para esta pergunta em particular, porque o OP perguntou sobre conselhos para um script Bash especificamente. Perpetrar a resposta errada é irresponsável; usuários que não conseguem perceber a diferença postam aqui com frequência e precisam ser mostrados por que essa resposta "funcionou para mim" não funcionou para eles.
tripleee
@kraftydevil too ^ Um dos vários alvos duplicados populares neste tópico: stackoverflow.com/questions/5725296/…
tripleee
5
@kot, repito: há situações em que isso funciona (exatamente como você descobriu), mas não é uma resposta correta no caso geral para a pergunta do título. No mínimo, essa resposta deve explicar as condições em que funciona; mas minha sugestão seria simplesmente excluir esta resposta.
tripleee
14

Em primeiro lugar você tem que torná-lo executável usando: chmod +x name_of_your_file_script.

Depois de torná-lo executável, você pode executá-lo usando ./same_name_of_your_file_script

Donald Shahini
fonte
10

Mude o seu diretório para onde o script está localizado usando o comando cd

Então digite

bash program-name.sh
gaurav07
fonte
6
Não há necessidade de ir a cdlugar nenhum; você pode especificar um nome de caminho arbitrariamente complexo como o argumento para bash; na verdade, qualquer programa que receba um argumento de nome de arquivo funciona dessa maneira (ou é terrivelmente, entorpecentemente quebrado).
tripleee
10

Este é um tópico antigo, mas me deparei com ele e estou surpreso que ninguém tenha colocado uma resposta completa ainda. Então aqui vai ...

O tutorial sobre como executar um script de linha de comando!

P: Como faço para executar isso no Terminal?

Confusões e conflitos:

  • Você não precisa de uma 'extensão' (como .sh ou .py ou qualquer outra), mas ajuda a manter o controle das coisas. Não vai doer. Se o nome do script contiver uma extensão, no entanto, você deverá usá-la.
  • Você não precisa estar em nenhum diretório específico por nenhum motivo.
  • Você não precisa digitar o nome do programa que executa o arquivo (BASH ou Python ou qualquer outro), a menos que queira. Não vai doer.
  • Você não precisa sudofazer nada disso. Este comando é reservado para a execução de comandos como outro usuário ou um usuário 'root' (administrador). Ótima postagem aqui .

(Uma pessoa que está aprendendo a executar scripts não deve usar este comando a menos que haja uma necessidade real, como instalar um novo programa. Um bom lugar para colocar seus scripts é na pasta ~ / bin. Você pode chegar lá digitando cd ~/binou cd $HOME/binno prompt do terminal. Você terá permissões totais nessa pasta.)

Para "executar este script" a partir do terminal em um sistema do tipo Unix / Linux, você deve fazer três coisas:

  1. Diga ao sistema a localização do script. (escolha um)

    • Digite o caminho completo com o nome do script (por exemplo /path/to/script.sh). Você pode verificar o caminho completo digitando pwdou echo $PWDno terminal.
    • Execute do mesmo diretório e use ./para o caminho (por exemplo ./script.sh). Fácil.
    • Coloque o script em um diretório que esteja no sistema PATHe apenas digite o nome (por exemplo script.sh). Você pode verificar o sistema PATHdigitando echo $PATHou echo -e ${PATH//:/\\n}se quiser uma lista mais organizada.
  2. Diga ao sistema que o script tem permissão para ser executado. (escolha um)

    • Defina o "bit de execução" digitando chmod +x /path/to/script.shno terminal.
    • Você também pode usar chmod 755 /path/to/script.shse preferir números. Há uma grande discussão com um gráfico legal aqui .
  3. Informe ao sistema o tipo de script. (escolha um)

    • Digite o nome do programa antes do script. (por exemplo, BASH /path/to/script.shou PHP /path/to/script.php) Se o script tiver uma extensão, como .php ou .py, ela faz parte do nome do script e você deve incluí-la.
    • Use um shebang , que vejo que você tem ( #!/bin/bash) em seu exemplo. Se você tiver isso como a primeira linha do seu script, o sistema usará esse programa para executar o script. Não há necessidade de digitar programas ou usar extensões.
    • Use um shebang "portátil" . Você também pode fazer com que o sistema escolha a versão do programa que aparece primeiro no PATHusando #!/usr/bin/envseguido do nome do programa (por exemplo, #!/usr/bin/env bashou #!/usr/bin/env python3). Existem prós e contras conforme discutido aqui .
Michael Treanor
fonte
1
Bom resumo. Talvez no último exemplo lembre as pessoas de que script.she script.phpsão os nomes de arquivo literais desses scripts, e que se você colocar uma extensão no nome do arquivo, será necessário incluí-la ao executar o script (e vice-versa; se o script não ' t tem uma extensão, não coloque uma). Isso é diferente, por exemplo, do DOS, em que você pode omitir o .batou .exedo nome do arquivo e os arquivos precisam ter uma extensão de um pequeno conjunto para serem considerados executáveis.
tripleee
1
Outro erro iniciante comum é mal-entendido a diferença entre path, /path, ./path, e ~/path. Eu acho que você provavelmente não quer explicar aqui, mas talvez um link para uma explicação como ... oh dang, eu tive que postar isso.
tripleee
1

E ainda mais uma maneira

. /path/to/script

Qual é o significado do ponto?

Comer no Joes
fonte
Isso executa o script no shell atual, que precisa ser chamado. Isso não é o que a maioria das pessoas espera que aconteça quando você simplesmente executa um script. Isso pode ter efeitos colaterais no ambiente existente.
Engenheiro de Software
-2

Se você estiver em um diretório ou pasta onde o arquivo de script está disponível, basta alterar a permissão do arquivo no modo executável,

chmod +x your_filename.sh

Depois disso, você executará o script usando o seguinte comando.

$ sudo ./your_filename.sh

Acima de "." representam o diretório atual. Nota! Se você não estiver no diretório onde o arquivo de script bash está presente, você pode alterar o diretório onde o arquivo está localizado usando

cd Directory_name/write the complete path

comando. Caso contrário, seu script não pode ser executado.

Hassan Shamshir
fonte
Espero que todos façam isso porque menciono todos os conceitos relacionados a esse problema específico.
Hassan Shamshir
Conforme explicado em outras respostas aqui, sudoestá errado e potencialmente terrivelmente errado se você usá-lo em um script não confiável que abusa dos poderes que você deu a ele desnecessariamente.
tripleee
O conselho para cdalgum lugar é difícil de entender, mas provavelmente também está errado.
tripleee