Se eu quiser executar um script bash que não tenha sua permissão de execução definida, eu posso fazer:
bash script.sh
O que devo usar em vez de bash
se o script não é executável e não conheço o intérprete correto? Existe um comando que procura o intérprete na linha shebang e executa o script com ele?
bash whatever
funcionar, por que usar algo diferente? bash é acessível em praticamente todos os sistemas ix *, então porque se preocupar ...Respostas:
Sim. É chamado
perl
:Isso é mencionado na documentação do Perl :
fonte
.js
também funciona?#!
. Eu pareço um pouco mais agora e não tive esse problema.man perlrun
timidamente admite que é "um pouco bizarro" :). Eu acho que isso deve ser tratado como uma curiosidade voltada para ambientes não-UNIX e versões muito muito antigas do UNIX.Os scripts não têm necessariamente um shebang
Se o script foi executado a partir do intérprete, Você não pode ter certeza de que tem o shebang em tudo . Os scripts, executados no intérprete, não precisam do shebang , se você chamar o intérprete para executar o código.
A resposta é, portanto, não, não há nenhum comando que descubra com certeza qual é o idioma (intérprete) para executar o script. No entanto, você sempre pode olhar dentro do script e ver se ele tem o que descobrir.
As regras em resumo:
Se o script não tiver shebang, no entanto, não há informações (diretas *) dentro do script para dizer qual intérprete usar.
Tendo dito isto
É claro que você sempre pode escrever um script de invólucro para tentar descobrir se o script possui o shebang e ler o intérprete a partir dele e, posteriormente, executá-lo a partir do intérprete encontrado.
Um exemplo
Salve-o como
tryrun
em$PATH
(por exemplo~/bin
, torne o diretório se ele não existir, efetue logout e logon novamente), torne-o executável . Em seguida, executando:chamadas (testado) O intérprete correta no meu não-executável
python
ebash
scripts.Explicação
#!
e usa o restante para chamar o intérprete.PermissionError
ou aFileNotFoundError
.Nota
A extensão (
.sh
,.py
etc) não desempenha nenhum qualquer papel na determinação do intérprete apropriado no Linux.(* É claro que é possível desenvolver um algoritmo de adivinhação "inteligente" para determinar a sintaxe do código.)
fonte
Você pode conseguir isso com um script como este:
Portanto:
Eu recomendo não fazer isso. As permissões existem por um motivo. Este é um programa para subverter permissões.
Observe que o manuseio do shebang é uma função do kernel (no código-fonte do Linux -
fs/binfmt_script.c
). Fundamentalmente, o processo que chama um script diretamente não sabe sobre o#!
- o kernel o usa para descobrir que ele precisa iniciar um intérprete.fonte