Execute um script de shell com um botão html

10

Eu quero lançar um script quando um botão é pressionado em um site. Esta é minha primeira tentativa:

<button type="button" onclick="/path/to/name.sh">Click Me!</button>

Mas sem sorte. Alguma sugestão?

EDITAR Seguindo o conselho do slhclk e mit:

Eu tenho um arquivo php em / var / www que eu aponto meu navegador para. O conteúdo do arquivo é o seguinte:

<?php
exec("/home/aa/scripts/test.sh");
?>

tesh.sh contém isto:

screen -S server1 -X quit

Se eu digitar /home/aa/scripts/test.sh no shell, o script poderá ser executado. No entanto, quando eu aponto meu navegador para link (que tem o código acima), vejo uma página em branco e o script não tinha não executado. Ambos têm permissões de execução. Por que isso não funciona?

    
por dukevin 04.06.2011 / 11:01

4 respostas

11

O que você está tentando fazer não é possível assim.

Observe que sempre há dois lados para isso: o lado do cliente e o lado do servidor. O script está no computador cliente ou no servidor?

Se estiver no cliente: Você, como visitante, só verá um site HTML. onClick só poderá iniciar o JavaScript (ou outros idiomas de script ), mas não qualquer script de shell arbitrário que reside no seu computador. Os scripts HTML só são executados no navegador e só podem fazer coisas limitadas. Mais importante, eles não podem interagir com o seu computador.

Pense nisso: como o navegador saberia como abrir o arquivo? Você não acha que isso seria um problema de segurança também - um site simples que aciona a execução de scripts no computador de um cliente? E se houvesse algo como 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. Eu não acho que seja necessário explicar isso em detalhes.

Se o script estiver no servidor: Se você quiser executar um script no lado do servidor e fazer com que o usuário acione sua execução, será necessário usar uma linguagem de programação do lado do servidor. Apenas o HTML não faz isso, porque é mais ou menos um arquivo estático. Se você quiser interagir com o servidor, você pode, por exemplo, usar o PHP .

Ele tem a função exec para executar um script de linha de comando armazenado na Web servidor. Então, basicamente, você poderia escrever exec('/path/to/name.sh'); e executaria o script no servidor.

No entanto, colocar isso em onClick não é suficiente aqui. Se você ainda não sabe sobre PHP e programação web do lado do servidor, você pode querer ler alguns tutoriais primeiro e depois voltar com uma questão mais específica.

Se você tiver um arquivo php com o comando exec(...) apropriado, certifique-se de que o script tenha permissões de execução definidas não apenas para o usuário, mas também para o grupo no qual o servidor da Web está, portanto, apenas 777 .

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 a partir da linha de comando e não do navegador com php /path/to/file.php .

    
por 04.06.2011 / 11:37
4

Você precisa de alguma inteligência do lado do servidor para isso. HTML sozinho 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 de FTP para colocar um arquivo de texto no diretório raiz do seu servidor.

O arquivo de texto pode ser chamado de "run.php" com o seguinte conteúdo:

<h3>Executing /path/to/name.sh</h3>
<?
exec('/path/to/name.sh');
?>

Digamos que seu domínio seja "example.com", se você visitar esta página no seu navegador:

link

então o arquivo php será executado no servidor. Ele irá enviar uma página HTML para o navegador com o título. E o script será executado no servidor.

Há algumas coisas que você deve ter em mente e algumas melhorias possíveis:

1) todos poderão acessar esta página, também robôs. Você poderia proteger a página com htacces.

2) Esta página será disparada no caso de uma solicitação "GET" normal do navegador. Mas ele invoca uma ação no servidor e, se essa ação alterar dados ou fizer algo importante, seria melhor disparar o script apenas 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 shell script (código de rturn e talvez saída de texto) e escrevê-lo no navegador. Isso tem problemas suficientes para uma questão em separado:)

    
por 04.06.2011 / 11:50
3

Pode ser um problema de permissão.

Quando você o acionou usando o webapp , ele é 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 ..:)

    
por 06.01.2012 / 07:21
1

Eu sei que é muito tarde, mas acho que vale a pena notar que configurar o 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á resolvendo a pergunta atualizada, mas eu descobri isso ao tentar descobrir as coisas por mim mesmo, então imaginei que o postaria!

    
por 11.08.2018 / 10:36

Tags