Quero iniciar um script bash quando um botão é pressionado em um site. Esta é a minha primeira tentativa:
<button type="button" onclick="/path/to/name.sh">Click Me!</button>
Mas sem sorte. Alguma sugestão?
EDIT- Seguindo o conselho de slhclk e mit:
Eu tenho um arquivo php em / var / www para o qual aponto meu navegador. O conteúdo do arquivo é o seguinte:
<?php
exec("/home/aa/scripts/test.sh");
?>
tesh.sh contém isso:
screen -S server1 -X quit
Se eu digitar o /home/aa/scripts/test.sh
shell, o script poderá ser executado. No entanto, quando aponto meu navegador para http://example.com/screen.php (que tem o código acima), vejo uma página em branco e o script não foi executado. Ambos têm permissões de execução. Por que isso não funciona?
Respostas:
O que você está tentando fazer não é possível dessa maneira.
Observe que sempre há dois lados: o lado do cliente e o servidor. O script está no computador cliente ou no servidor?
Se estiver no cliente: você como visitante está vendo apenas um site HTML.
onClick
só poderá iniciar o JavaScript (ou outras linguagens de script ), mas não qualquer shell script arbitrário que resida no seu computador. Os scripts HTML são executados apenas no navegador e podem fazer coisas limitadas. Mais importante ainda, eles não podem interagir com o seu computador.Pense nisso: como o navegador saberia abrir o arquivo? Você não acha que isso também seria um problema de segurança - um site simples acionando a execução de scripts no computador do cliente? E se houvesse algo assim
onClick('rm -rf /home/user')
?Uma alternativa seria executar um applet Java, se você quiser que o código seja executado no cliente, mas isso não é exatamente o mesmo e é algo realmente complicado. Não acho que seja necessário explicar isso em detalhes.
Se o script estiver no servidor: se você deseja executar um script no lado do servidor e fazer com que o usuário inicie sua execução, será necessário usar uma linguagem de programação do lado do servidor. Apenas o HTML não fará isso, porque é mais ou menos um arquivo estático. Se você deseja interagir com o servidor, pode, por exemplo, usar PHP .
Ele tem a
exec
função de executar um script de linha de comando armazenado no servidor da web. Então, basicamente, você poderia escreverexec('/path/to/name.sh');
e executaria o script no servidor.No entanto, apenas colocar isso
onClick
não é suficiente aqui. Se você ainda não conhece o PHP e a programação da Web do lado do servidor, leia alguns tutoriais primeiro e depois retorne com uma pergunta mais específica.Se você possui um arquivo php com o
exec(...)
comando apropriado , certifique-se de que o script tenha permissões definidas não apenas para o usuário, mas também para o grupo em que o servidor da web se encontra, portanto, no caso mais simples777
.Em caso de problemas, verifique o valor de retorno do script com
echo exec(...);
para ver se há algum erro.Você também pode executar o script na linha de comando e não no navegador com
php /path/to/file.php
.fonte
exec
linha escrevendoecho exec(...);
. Observe também que o script precisa executar permissões para o grupo em que o servidor da Web é executado, não apenas para o usuário.php -v
e o fato de ter o phpfilemanager para as pessoas editarem arquivos. Por que não está usando o intérprete php?php /var/www/trash/run.php
e não apenas o nome do arquivo PHP.Você precisa de alguma inteligência do lado do servidor para isso. Somente o HTML não é suficiente, porque é estático. Uma maneira comum seria php. Muitas ofertas hospedadas têm o php instalado por padrão.
Você pode usar um programa ftp para colocar um arquivo de texto no diretório raiz do seu servidor.
O arquivo de texto pode ser nomeado "run.php" com o seguinte conteúdo:
Digamos que seu domínio seja "example.com", se você visitar esta página no seu navegador:
http://example.com/run.php
então o arquivo php será executado no servidor. Ele enviará uma página HTML para o navegador com o cabeçalho. E o script será executado no servidor.
Há algumas coisas a serem lembradas e algumas possíveis melhorias:
1) todos poderão acessar esta página, também robôs. Você pode proteger a página com htacces.
2) Esta página será acionada no caso de uma solicitação "GET" normal do navegador. Mas invoca uma ação no servidor e, se essa ação alterar dados ou fazer algo importante, seria melhor disparar apenas o script em uma solicitação POST.
3) Você pode inserir uma declaração de formulário / botão para poder recarregar / executar novamente a página. Certifique-se de usar o método correto (GET ou POST) no atributo de método da instrução de formulário HTML.
4) Seria bom obter o resultado do script de shell (código rturn e talvez saída de texto) e gravá-lo no navegador. Isso tem problemas suficientes para uma pergunta separada:)
fonte
Pode ser um problema de permissão.
Quando você o acionou usando o webapp , é o apache que executa o script. Se o apache não tiver permissão para executar o script, ele não funcionará.
Solução: verifique a permissão e tente novamente .. :)
fonte
Sei que é tarde demais, mas acho que vale a pena notar que a configuração do CGI em um servidor permitirá que você execute um script bash do lado do servidor sem usar PHP ou qualquer coisa do tipo.
Eu sei que isso não está abordando a questão atualizada, mas eu encontrei isso ao tentar descobrir as coisas por conta própria, então pensei em publicá-la!
fonte
Para executar scripts shell diretamente do navegador, você deve adicionar esta regra ao seu arquivo .htaccess:
Isso indica ao servidor da Web para tratar arquivos .sh como scripts CGI. Não se esqueça de alterar as permissões de arquivo .sh para 755.
fonte