我想在网站上按下按钮时启动一个 bash 脚本。这是我的第一次尝试:
<button type="button" onclick="/path/to/name.sh">Click Me!</button>
但运气不佳。有什么建议吗?
编辑-遵循slhclk和mit的建议:
我在 /var/www 中有一个 php 文件,我将 Web 浏览器指向该文件。该文件的内容如下:
<?php
exec("/home/aa/scripts/test.sh");
?>
tesh.sh 包含以下内容:
screen -S server1 -X quit
如果我输入/home/aa/scripts/test.sh
shell,脚本就可以执行。但是,当我将 Web 浏览器指向http://example.com/screen.php(包含上述代码),我看到一个空白页,并且脚本尚未执行。两者都具有执行权限。为什么不起作用?
答案1
你想做的事情不可能通过这种方式实现。
请注意,这总是有两个方面:客户端和服务器端。脚本是在客户端计算机上还是在服务器上?
如果是在客户端:作为访问者,您只能看到一个 HTML 网站。onClick
只能启动 JavaScript(或其他脚本语言),但不是驻留在您计算机上的任何任意 shell 脚本。HTML 脚本仅在浏览器中运行,并且只能执行有限的操作。最重要的是,它们无法与您的计算机交互。
想想看:浏览器怎么知道如何打开文件?你不觉得这也是一个安全问题吗——一个普通的网站触发了客户端计算机上脚本的执行?如果有这样的事情会怎么样onClick('rm -rf /home/user')
?
如果您希望代码在客户端执行,另一种方法是运行 Java 小程序,但这并不完全相同,而且非常复杂。我认为没有必要详细解释这一点。
如果脚本在服务器上:如果您想在服务器端运行脚本并让用户触发其执行,则需要使用服务器端编程语言。仅使用 HTML 无法做到这一点,因为它或多或少是一个静态文件。如果您想与服务器交互,例如,您可以使用PHP。
它具有exec
函数运行存储在 Web 服务器上的命令行脚本。基本上,您可以编写脚本exec('/path/to/name.sh');
,然后它会在服务器上运行该脚本。
但是,仅仅介绍这些onClick
还不够。如果您还不了解 PHP 和服务器端 Web 编程,您可能需要先阅读一些教程,然后再提出更具体的问题。
如果您有一个包含适当exec(...)
命令的 php 文件,请确保该脚本不仅为用户设置了执行权限,而且为 Web 服务器所在的组设置了执行权限,因此在最简单的情况下只需777
。
如果出现问题,请检查脚本的返回值以echo exec(...);
查看是否存在任何错误。
您还可以从命令行运行脚本,而不是从浏览器运行php /path/to/file.php
。
答案2
您需要一些服务器端智能来实现这一点。仅使用 HTML 是不够的,因为它是静态的。一种常见的方法是使用 php。许多托管服务确实默认安装了 php。
您可以使用 ftp 程序将文本文件放入服务器的根目录中。
该文本文件可以命名为“run.php”,内容如下:
<h3>Executing /path/to/name.sh</h3>
<?
exec('/path/to/name.sh');
?>
假设您的域名是“example.com”,如果您在浏览器中访问此页面:
然后 php 文件将在服务器上执行。它将向浏览器发送一个带有标题的 HTML 页面。并且脚本将在服务器上执行。
有一些事情需要牢记,并且有一些可以改进的地方:
1) 每个人都可以访问此页面,包括机器人。您可以使用 htacces 保护页面。
2) 如果浏览器发出正常的“GET”请求,则此页面将触发。但是它涉及服务器上的操作,并且如果此操作更改数据或执行重要操作,则最好仅在 POST 请求时触发脚本。
3) 您可以插入表单/按钮语句,以便能够重新加载/再次执行页面。请确保在 HTML 表单语句的方法属性中使用正确的方法(GET 或 POST)。
4) 最好能获取 shell 脚本的结果(返回代码,也可能是文本输出)并将其写入浏览器。这个问题已经够多了,可以单独问一个问题了 : )
答案3
这可能是权限问题。
当你使用以下方式触发它时网络应用, 这是阿帕奇运行脚本。如果阿帕奇如果没有权限运行该脚本,它将无法工作。
解决方案:检查权限并重试.. :)
答案4
要直接从浏览器运行 shell 脚本,您应该将此规则添加到 .htaccess 文件中:
Options +ExecCGI
AddHandler cgi-script .sh
这告诉 Web 服务器将 .sh 文件视为 CGI 脚本。不要忘记将 .sh 文件权限更改为 755。