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):
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.shdá scriptname.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.
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.
@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
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:
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.
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 .
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 .
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.
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.
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.
chmod +x scriptname
e então./scriptname
.Respostas:
$prompt: /path/to/script
e pressione Enter. Observe que você precisa ter certeza de que o script tem permissões de execução.fonte
/path/to
diretório, por exemplo, com ocd /path/to
comando, você pode entrar./script
para executar seu script. Não se esqueça, neste caso, o './' antes de 'script'Mais uma maneira de executá-lo (desta vez sem definir permissões de execução):
fonte
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
se no mesmo diretório ou
se estiver na pasta bin.
fonte
./scriptname.sh
funciona para mim, masscriptname.sh
dáscriptname.sh: command not found
.-rwxr-xr-x
são suas permissões.cd
qualquer 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 decd
nenhum lugar para executá-lo muitas vezes não vai querer.Você poderia fazer:
sh scriptname.sh
fonte
sh
é um link simbólico parabash
, ou se o script não usa qualquer construção específicas do Bash. No primeiro caso, usar embash
vez desh
é 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.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
fonte
Mude o seu diretório para onde o script está localizado usando o comando cd
Então digite
fonte
cd
lugar nenhum; você pode especificar um nome de caminho arbitrariamente complexo como o argumento parabash
; na verdade, qualquer programa que receba um argumento de nome de arquivo funciona dessa maneira (ou é terrivelmente, entorpecentemente quebrado).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:
sudo
fazer 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 ~/bin
oucd $HOME/bin
no prompt do terminal. Você terá permissões totais nessa pasta.)Diga ao sistema a localização do script. (escolha um)
/path/to/script.sh
). Você pode verificar o caminho completo digitandopwd
ouecho $PWD
no terminal../
para o caminho (por exemplo./script.sh
). Fácil.PATH
e apenas digite o nome (por exemploscript.sh
). Você pode verificar o sistemaPATH
digitandoecho $PATH
ouecho -e ${PATH//:/\\n}
se quiser uma lista mais organizada.Diga ao sistema que o script tem permissão para ser executado. (escolha um)
chmod +x /path/to/script.sh
no terminal.chmod 755 /path/to/script.sh
se preferir números. Há uma grande discussão com um gráfico legal aqui .Informe ao sistema o tipo de script. (escolha um)
BASH /path/to/script.sh
ouPHP /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.#!/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.PATH
usando#!/usr/bin/env
seguido do nome do programa (por exemplo,#!/usr/bin/env bash
ou#!/usr/bin/env python3
). Existem prós e contras conforme discutido aqui .fonte
script.sh
escript.php
sã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.bat
ou.exe
do nome do arquivo e os arquivos precisam ter uma extensão de um pequeno conjunto para serem considerados executáveis.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.E ainda mais uma maneira
Qual é o significado do ponto?
fonte
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.
fonte
sudo
está 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.cd
algum lugar é difícil de entender, mas provavelmente também está errado.