2011-06-04 09:01:23 +0000 2011-06-04 09:01:23 +0000
12
12

运行一个带有html按钮的shell脚本

我想在网站上的按钮被按下时启动一个bash脚本。这是我第一次尝试。

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

但没有成功。有什么建议吗?

编辑-根据slhclk和mit的建议:

我在/var/www有一个php文件,我把浏览器指向这个文件。该文件的内容如下。

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

tesh.sh包含了这些内容。

screen -S server1 -X quit

如果我在shell中输入/home/aa/scripts/test.sh,脚本就能执行。但是,当我把浏览器指向 http://example.com/screen.php (其中有上面的代码)时,我看到的是一个空白页,而且脚本没有执行。两者都有执行权限。为什么不能执行?

答案 (5)

11
11
11
2011-06-04 09:37:02 +0000

你想做的事情是不可能那样做的。

注意,总是有两面性的。客户端和服务器端 脚本是在客户端还是在服务器上?


如果是在客户端:你作为访问者只能看到一个HTML网站。onClick将只能启动JavaScript(或其他脚本语言),而不能启动任何驻留在你电脑上的任意shell脚本。HTML脚本只能在浏览器中运行,并且只能做有限的事情。最重要的是,它们不能与您的计算机进行交互。

想想看。浏览器怎么会知道如何打开文件?你不觉得这也是一个安全问题吗–一个普通的网站会触发客户端电脑上脚本的执行?如果有类似onClick('rm -rf /home/user')?

另一种选择是运行一个Java小程序,如果你想让代码在客户端执行,但这并不完全一样,这是很复杂的事情。我认为没有必要详细解释。


如果脚本在服务器上:如果你想在服务器端运行一个脚本,并让用户触发其执行,那么你需要使用服务器端编程语言。仅仅是HTML是不行的,因为它多少是一个静态文件。如果你想与服务器进行交互,你可以例如使用 PHP

它有 exec 函数来运行一个存储在web服务器上的命令行脚本。所以基本上,你可以写exec('/path/to/name.sh');,它就会在服务器上运行脚本。

然而,仅仅把这个放到onClick中是不够的。如果你还不了解PHP和服务器端Web编程,你可能要先看几篇教程,然后再来问一个更具体的问题。

  • *

如果你的php文件有相应的exec(...)命令,请确保脚本不仅为用户设置了执行权限,还为web服务器所在的组设置了执行权限,所以最简单的情况下只需777

在遇到麻烦的情况下,用echo exec(...);检查脚本的返回值,看看是否有错误。

你也可以用php /path/to/file.php从命令行而不是从浏览器运行脚本。

4
4
4
2011-06-04 09:50:25 +0000

你需要一些服务器端的智能来实现。仅有HTML是不够的,因为它是静态的。一个常见的方法是php。许多托管的报价都默认安装了php。

你可以用一个ftp程序把一个文本文件放到服务器的根目录下。

文本文件可以命名为 “run.php",内容如下。

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

假设你的域名是 "example.com”, 如果你在浏览器中访问这个页面: http://example.com/run.php

那么这个php文件就会在服务器上被执行。它将向浏览器发送一个标题为HTML的页面。脚本将在服务器上执行。

有一些需要注意的地方和一些可能的改进。

1)每个人都可以访问这个页面,包括机器人。你可以用htacces来保护这个页面。

2) 这个页面会在浏览器发出正常的 “GET "请求时启动。但它涉及到服务器上的一个操作,如果这个操作改变了数据或做了一些重要的事情,最好只在POST请求时启动脚本。

3) 你可以插入一个表单/按钮语句,以便能够重新加载/再次执行页面。请确保在HTML表单语句的方法属性中使用正确的方法(GET或POST)。

4) 如果能得到shell脚本的结果(rturn代码和可能的文本输出)并将其写到浏览器中就更好了。这方面的问题已经够多了,可以单独写一个问题 :)

3
3
3
2012-01-06 06:21:27 +0000

可能是权限问题。

当你用webapp触发时,是apache在运行脚本。如果apache没有运行脚本的权限,它将无法工作。

解决方法:检查权限,再试一次…:)

1
1
1
2018-08-11 08:36:42 +0000

我知道这已经很晚了,但我认为值得注意的是,在服务器上配置CGI可以让你在不使用PHP或其他类似的东西的情况下运行一个服务器端的bash脚本。

我知道这不是在解决更新的问题,但我在试图自己弄清楚事情的时候发现了这个,所以我想我应该把它贴出来!

0
0
0
2018-11-09 17:43:32 +0000

要想直接从浏览器运行shell脚本,你应该在你的.htaccess文件中添加这个规则。

Options +ExecCGI
AddHandler cgi-script .sh

这将告诉网络服务器将.sh文件视为CGI脚本。不要忘记将.sh文件的权限改为755。