Eu tenho um script de shell que eu quero executar sem usar os comandos "sh" ou "bash". Por exemplo:
Ao invés de: sh script.sh
Eu quero usar: script.sh
Como posso fazer isso?
PS (i) Não uso muito o shell script e tentei ler sobre aliases, mas não entendi como usá-los.
(ii) Também li sobre como vincular o script a outro arquivo nas variáveis PATH. Estou usando meu servidor universitário e não tenho permissões para criar um arquivo nesses locais.
$HOME/bin
- se você ainda não possui um, adicione-o ao seu PATH (próximo à frente). Coloque os scripts (e quaisquer outros programas) que você deseja executar diretamente sem especificar o nome do caminho aqui ou links simbólicos aqui para onde estão os programas reais.mv example.sh example
e, em seguida,example
deve funcionar por conta própria.Respostas:
Adicione um "shebang" na parte superior do seu arquivo:
E torne seu arquivo executável (
chmod +x script.sh
).Por fim, modifique seu caminho para adicionar o diretório em que seu script está localizado:
(normalmente, você deseja
$HOME/bin
armazenar seus próprios scripts)fonte
source script.sh
funcionou bem, ou melhor #source <filename_without_any_extension_type>
source ./my-cool-script
(ou. ./my-cool-script
) poluirá a sessão atual do shell com quaisquer variáveis definidas no script. O fornecimento não deve ser usado, a menos que você deseje modificar explicitamente a sessão do shell, definindo vars do ambiente, alterando o diretório etc. Erros muito terríveis podem resultar de outra forma, pois as variáveis de uma execução de script, se feitas via sourcing, podem afetar outra execução de script../
, poderá haver uma colisão de nomes. Tente renomear.Estes são alguns dos pré-requisitos para usar diretamente o nome do script:
she-bang (#!/bin/bash)
linha no topo.chmod u+x scriptname
make o script executável. (ondescriptname
está o nome do seu script)/usr/local/bin
pastaNota: O motivo pelo qual sugeri colocá-lo na
/usr/local/bin
pasta é porque provavelmente esse caminho já foi adicionado ao seuPATH variable
.Atualizar:
Se você não tiver acesso à
/usr/local/bin
pasta, faça o seguinte:myscripts
.ls -lart
no seu diretório pessoal, para identificar o script de inicialização que seu shell está usando. Deve ser.profile
ou.bashrc
.export set PATH=$PATH:~/myscript
.scriptname
.fonte
. .bashrc
. Ou seja, basta colocar.
seguido despace
e, em seguida, o nome do script de inicialização.Apenas verifique se ele é executável, usando
chmod +x
. Por padrão, o diretório atual não está no seu PATH, portanto, você precisará executá-lo como./script.sh
- ou referenciá-lo por um caminho qualificado. Como alternativa, se você realmente precisa apenasscript.sh
, precisará adicioná-lo ao seu PATH. (Você pode não ter acesso para modificar o caminho do sistema, mas quase certamente pode modificar o CAMINHO do seu próprio ambiente atual.) Isso também pressupõe que seu script comece com algo parecido#!/bin/sh
.Você também pode usar um alias, que não está realmente relacionado ao script de shell, mas apenas ao shell, e é simples como:
O que permitiria que você usasse simplesmente
script.sh
(literalmente - isso não funcionará em nenhum outro*.sh
arquivo) em vez desh script.sh
.fonte
alias
comando no prompt do shell e, em seguida, o alias estará disponível para executar o comando.Neste exemplo, o arquivo será chamado
myShell
Antes de tudo, precisamos criar esse arquivo, podemos começar digitando o seguinte:
Reparou que não colocamos a
.sh
extensão? Isso porque quando o rodamos no terminal, precisamos apenas digitarmyShell
para executar nosso comando!Agora, no nano, a linha superior DEVE ser,
#!/bin/bash
então você pode deixar uma nova linha antes de continuar.Para demonstração, adicionarei uma
Hello World!
resposta básicaEntão, digito o seguinte:
Depois disso, meu exemplo deve ficar assim:
Agora salve o arquivo e execute o seguinte comando:
Agora, tornamos o arquivo executável, para o qual podemos movê-lo
/usr/bin/
usando o seguinte comando:Apenas para garantir que a máquina possa executá-la corretamente, precisaremos reiniciar a máquina
eu usei
sudo shutdown -r now
Parabéns! Nosso comando está pronto! No terminal, podemos digitar
myShell
e deve-se dizerHello World!
fonte
/usr/bin
- muitos sistemas são utilizados/usr/local/bin
para esse fim e se reservam/usr/bin
estritamente para o sistema operacional.sudo chmod
seu próprio arquivo.Você precisa habilitar o bit executável para o programa.
Então você pode usar
./script.sh
Você pode adicionar a pasta ao PATH no seu
.bashrc
arquivo (localizado no diretório inicial). Adicione esta linha ao final do arquivo:fonte
Você pode digitar sudo install (nome do script) / usr / local / bin / (o que você deseja digitar para executar o referido script)
ex:
sudo install quickcommit.sh /usr/local/bin/quickcommit
digite a senhaagora pode ser executado sem .sh e em qualquer diretório
fonte
Adicionar . (diretório atual) para sua variável PATH.
Você pode fazer isso editando seu arquivo .profile.
Coloque a seguinte linha no seu arquivo .profile
PATH=$PATH:.
Apenas adicione a
#!/bin/bash
linha Shebang ( ) no início do seu script e torne o script executável (usandochmod +x <File Name>
).fonte
Aqui está o meu script de backup que lhe dará a ideia e a automação:
Servidor: Ubuntu 16.04 PHP: 7.0 Apache2, Mysql etc ...
mude / home / user para o diretório de usuário e digite: backupscript em qualquer lugar do terminal para executar o script! (assumindo que / usr / bin esteja no seu caminho)
fonte
Digite
"#!/bin/sh"
antes do script. Em seguida, salve-o comoscript.sh
por exemplo. copie-o para$HOME/bin
ou$HOME/usr/bin
O diretório pode ser diferente em diferentes distros linux, mas eles terminam com
'bin'
e estão no diretório inicialcd $HOME/bin
ou no$HOME/usr/bin
Tipo
chmod 700 script.sh
E você pode executá-lo apenas digitando
run.sh
no terminal. Se não funcionar, tente emchmod +x run.sh
vez dechmod 700 run.sh
fonte
Tornar qualquer arquivo como executável
Digamos que você tenha um arquivo executável chamado migrate_linux_amd64 e deseje executá-lo como um comando como "migrar"
Verifique se você possui privilégios de execução no arquivo,
-rwxr-xr-x 1 oracle oinstall 7473971 May 18 2017 migrate.linux-amd64
caso contrário, execute
chmod +x migrate.linux-amd64
Em seguida, copie seu arquivo para
/usr/local/bin
. Este diretório pertence ao root, use sudo ou alterne para root e execute a seguinte operaçãofonte
Somente:
fonte