2012-06-28 298 views
1

我有一个独立应用程序,它在Ubuntu中运行Shell脚本(带参数)。在服务器上运行Shell脚本

ProcessBuilder pb1 = new ProcessBuilder("sh","deltapackage_app.sh","part_value","pathtofile"); 
Process process1 = pb1.start(); 

我正在通过GUI参数。 现在我想在web应用程序中实现同样的事情,我可以将输入形式的网页发送到服务器,然后服务器将执行带参数的shell脚本。

任何人都可以建议我这样做的最佳方式。我应该用什么东西来做到这一点。

我知道我必须学习很多关于服务器的东西。或者我可以使用基于浏览器的应用程序相同的代码

+0

你应该关心的安全性,如果你允许用户提供的参数shell脚本。平原/不加引号/未转义的shell参数允许在命令行上执行进程,例如从互联网上下载可执行文件... – Black

回答

1

考虑下面的代码行:

Process p = Runtime.getRuntime().exec("/bin/sh -c /bin/ls > ls.out"); 

这是为了执行一个Bourne壳和具有壳执行 ls命令,LS的输出重定向到文件ls.out。使用/ bin/sh的原因是解决了Java内部重定向标准输出 的问题。不幸的是,如果你试试这个 什么都不会发生。当这个命令字符串被传递给exec()方法时,它将被分解成一个字符串数组,其元素为 为“/ bin/sh”,“-c”,“/ bin/ls”,“>”和“ls.out”。这将会失败, 由于sh期望只有一个参数到“-c”开关。为了使这个 工作的尝试:

String[] cmd = {"/bin/sh", "-c", "/bin/ls > out.dat"}; 
    Process p = Runtime.getRuntime().exec(cmd); 

由于命令行已经是一系列字符串,字符串 将简单地由exec()方法装入命令阵列和 传递到新过程就是这样。因此,shell会看到“-c”和“/ bin/ls> ls.out”命令并正确执行。

http://www.ensta-paristech.fr/~diam/java/online/io/javazine.html