Ich möchte ein Bash-Skript starten, wenn auf einer Website eine Schaltfläche gedrückt wird. Dies ist mein erster Versuch:
<button type="button" onclick="/path/to/name.sh">Click Me!</button>
Aber kein Glück. Irgendwelche Vorschläge?
EDIT- Befolgen Sie die Ratschläge von slhclk und mit:
Ich habe eine PHP-Datei in / var / www, auf die ich meinen Webbrowser zeige. Der Inhalt der Datei lautet wie folgt:
<?php
exec("/home/aa/scripts/test.sh");
?>
tesh.sh enthält Folgendes:
screen -S server1 -X quit
Wenn ich eine /home/aa/scripts/test.sh
Shell eingebe, kann das Skript ausgeführt werden. Wenn ich jedoch meinen Webbrowser auf http://example.com/screen.php (mit dem obigen Code) zeige, wird eine leere Seite angezeigt und das Skript wurde nicht ausgeführt. Beide haben Ausführungsberechtigungen. Warum funktioniert es nicht?
Antworten:
Was Sie versuchen, ist auf diese Weise nicht möglich.
Beachten Sie, dass dies immer zwei Seiten hat: die Clientseite und die Serverseite. Befindet sich das Skript auf dem Client-Computer oder auf dem Server?
Wenn es auf dem Client ist: Sie als Besucher sehen nur eine HTML-Website.
onClick
kann nur JavaScript (oder andere Skriptsprachen ) starten , jedoch kein beliebiges Shell-Skript, das sich auf Ihrem Computer befindet. HTML-Skripte werden nur im Browser ausgeführt und können nur begrenzte Aufgaben ausführen. Vor allem können sie nicht mit Ihrem Computer interagieren.Denken Sie darüber nach: Woher weiß der Browser, wie die Datei geöffnet wird? Glauben Sie nicht, dass dies auch ein Sicherheitsproblem wäre - eine einfache Website, die die Ausführung von Skripten auf dem Computer eines Kunden auslöst? Was wäre, wenn es so etwas gäbe
onClick('rm -rf /home/user')
?Eine Alternative wäre, ein Java-Applet auszuführen, wenn Code auf dem Client ausgeführt werden soll, dies ist jedoch nicht genau dasselbe und es ist etwas wirklich Kompliziertes. Ich denke nicht, dass es notwendig ist, dies im Detail zu erklären.
Wenn sich das Skript auf dem Server befindet: Wenn Sie ein Skript auf der Serverseite ausführen möchten und der Benutzer seine Ausführung auslösen soll, müssen Sie eine serverseitige Programmiersprache verwenden. Nur HTML wird es nicht tun, weil es mehr oder weniger eine statische Datei ist. Wenn Sie mit dem Server interagieren möchten, können Sie beispielsweise PHP verwenden .
Es hat die
exec
Funktion, ein Befehlszeilenskript auszuführen, das auf dem Webserver gespeichert ist. Im Grunde könnte man also schreibenexec('/path/to/name.sh');
und es würde das Skript auf dem Server ausführen.Es
onClick
reicht hier jedoch nicht aus , dies nur zu tun . Wenn Sie noch nichts über PHP und serverseitige Webprogrammierung wissen, sollten Sie zuerst einige Tutorials lesen und dann eine spezifischere Frage stellen.Wenn Sie eine PHP-Datei mit dem entsprechenden
exec(...)
Befehl haben, stellen Sie sicher, dass für das Skript Ausführungsberechtigungen nicht nur für den Benutzer, sondern auch für die Gruppe festgelegt sind, in der sich der Webserver befindet, also im einfachsten Fall777
.Überprüfen Sie im Fehlerfall den Rückgabewert des Skripts mit,
echo exec(...);
um festzustellen, ob Fehler vorliegen .Sie können das Skript auch über die Befehlszeile und nicht über den Browser mit ausführen
php /path/to/file.php
.quelle
exec
Zeile durch Schreiben zu erhaltenecho exec(...);
. Beachten Sie auch, dass das Skript Ausführungsberechtigungen für die Gruppe benötigt, auf der Ihr Webserver ausgeführt wird, nicht nur für Ihren Benutzer.php -v
und die Tatsache, dass ich einen PHPFIL-Manager habe, auf dem Leute Dateien bearbeiten können. Warum wird der PHP-Interpreter nicht verwendet?php /var/www/trash/run.php
und nicht nur mit dem PHP-Dateinamen selbst ausführen .Dazu benötigen Sie serverseitige Informationen. HTML allein reicht nicht aus, da es statisch ist. Ein üblicher Weg wäre PHP. Bei vielen gehosteten Angeboten ist PHP standardmäßig installiert.
Sie können ein FTP-Programm verwenden, um eine Textdatei im Stammverzeichnis Ihres Servers abzulegen.
Die Textdatei könnte "run.php" mit folgendem Inhalt heißen:
Angenommen, Ihre Domain ist "example.com", wenn Sie diese Seite in Ihrem Browser besuchen:
http://example.com/run.php
dann wird die PHP-Datei auf dem Server ausgeführt. Es wird eine HTML-Seite mit der Überschrift an den Browser gesendet. Und das Skript wird auf dem Server ausgeführt.
Es gibt einige Dinge zu beachten und einige mögliche Verbesserungen:
1) Jeder kann diese Seite treffen, auch Roboter. Sie können die Seite mit htacces sichern.
2) Diese Seite wird bei einer normalen "GET" -Anforderung vom Browser ausgelöst. Es handelt sich jedoch um eine Aktion auf dem Server. Wenn diese Aktion Daten ändert oder etwas Wichtiges tut, ist es besser, das Skript nur bei einer POST-Anforderung auszulösen.
3) Sie können eine Formular- / Schaltflächenanweisung einfügen, um die Seite erneut laden / ausführen zu können. Stellen Sie sicher, dass Sie die richtige Methode (GET oder POST) im Methodenattribut der HTML-Formularanweisung verwenden.
4) Es wäre gut, das Ergebnis des Shell-Skripts (Rturn-Code und möglicherweise Textausgabe) abzurufen und in den Browser zu schreiben. Dies hat genug Probleme für eine separate Frage :)
quelle
Es könnte ein Berechtigungsproblem sein.
Wenn Sie es mit der Webanwendung ausgelöst haben , wird das Skript von Apache ausgeführt . Wenn Apache keine Berechtigung zum Ausführen des Skripts hat, funktioniert es nicht.
Lösung: Überprüfen Sie die Berechtigung und versuchen Sie es erneut .. :)
quelle
Ich weiß, dass dies viel zu spät ist, aber ich denke, es ist erwähnenswert, dass Sie durch die Konfiguration von CGI auf einem Server ein serverseitiges Bash-Skript ausführen können, ohne PHP oder ähnliches zu verwenden.
Ich weiß, dass dies nicht die aktualisierte Frage betrifft, aber ich habe dies gefunden, als ich versucht habe, die Dinge selbst herauszufinden, also dachte ich, ich würde es posten!
quelle
Um Shell-Skripte direkt vom Browser aus auszuführen, sollten Sie diese Regel zu Ihrer .htaccess-Datei hinzufügen:
Dadurch wird der Webserver angewiesen, .sh-Dateien als CGI-Skripte zu behandeln. Vergessen Sie nicht, die Berechtigungen für .sh-Dateien in 755 zu ändern.
quelle