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?


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.


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


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.


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


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


10

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

Então digite

bash program-name.sh

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 .

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


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.