当前位置: 首页 > 编程笔记 >

Java调用linux shell脚本的方法

郤飞英
2023-03-14
本文向大家介绍Java调用linux shell脚本的方法,包括了Java调用linux shell脚本的方法的使用技巧和注意事项,需要的朋友参考一下

首先,我们需要增加用户对该脚本的执行权限,即


 String cmdstring = "chmod a+x test.sh";

 Process proc = Runtime.getRuntime().exec(cmdstring);

 proc.waitFor(); //阻塞,直到上述命令执行完

 cmdstring = "bash test.sh"; //这里也可以是ksh等

 proc = Runtime.getRuntime().exec(cmdstring);

 // 注意下面的操作 

 string ls_1;

 BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(proc.getInputStream());

 while ( (ls_1=bufferedReader.readLine()) != null);

 bufferedReader.close();

 proc.waitFor();

为什么要有上面那段操作呢?

原因是:可执行程序的输出可能会比较多,而运行窗口的输出缓冲区有限,会造成waitFor一直阻塞。解决的办法是,利用Java提供的Process类提供的getInputStream,getErrorStream方法让Java虚拟机截获被调用程序的标准输出、错误输出,在waitfor()命令之前读掉输出缓冲区中的内容。

希望大家能够喜欢本文,有疑问请给我留言。

 类似资料:
  • 问题内容: 如何从外壳脚本内部执行Java方法? 问题答案: 您只能调用该方法。设计您的方法,使其调用所需的方法。 当我说 调用 方法时,您不会显式调用它。调用它是Java程序的唯一入口点。 如果您的班级看起来像: 您可以使用以下命令行在您可以找到的目录中调用from (如果您位于下面显示的结构的目录中): 如果要从其他目录(请参见下面的目录结构)执行此操作,则必须设置类路径。 为了清楚起见,请采

  • 问题内容: 我想从Java调用R脚本。我已经对该主题进行了google搜索,但是我看到的几乎所有结果都需要我向某些第三方库添加依赖项。任何人都可以向我展示一种在不添加任何依赖项的情况下完成同一件事的好方法吗? 我正在使用Windows计算机,因此也许我可以使用命令行来启动R(如果尚未打开)并运行特定的R脚本。但是我从未写过命令行代码(或从Java调用过),因此我需要代码示例。 我将使用命令行思路包

  • 6. Shell脚本的调试方法 Shell提供了一些用于调试脚本的选项,如下所示: -n 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误 -v 一边执行脚本,一边将执行过的脚本命令打印到标准错误输出 -x 提供跟踪执行信息,将执行的每一条命令和结果依次打印出来 使用这些选项有三种方法,一是在命令行提供参数 $ sh -x ./script.sh 二是在脚本开头提供参数 #! /bin/sh

  • 问题内容: 我阅读是一种选择,但这是最好的方法吗? 我需要该脚本的答案,因此在某些情况下,我必须阅读脚本的返回,尽管在其他情况下,我可能会从文本文件中读取该脚本的返回。 无论如何,是从Java调用Perl脚本的好方法吗?我应该注意,我正在开发Java Web应用程序,因此这里的安全性是一个问题。 问题答案: 您可以使用或使用Process API 。使用Process API,您可以获取脚本的输出

  • 问题内容: 是否有任何库允许我从Shell脚本调用JMX MBean方法。我们通过JMX公开了一些操作/管理命令,我们可以让管理员使用JConsole或VisualVM,但最好将某些任务留给自动化。在这种自动化中,我们希望能够在运行的服务器上调用JMX MBean方法,最好是从Shell脚本中调用。 问题答案: 可以使用以下命令行JMX实用程序: jmxterm-似乎是功能最齐全的实用程序。 cm

  • 本文向大家介绍Shell脚本中引用、调用另一个脚本文件的2种方法,包括了Shell脚本中引用、调用另一个脚本文件的2种方法的使用技巧和注意事项,需要的朋友参考一下 在Java,Python中,可以用import的方式来进行脚本或模块之间调用,例如: 在Shell中要如何调用别的shell脚本,或别的脚本中的变量,函数呢? 方法一:   . ./subscript.sh      方法二:   so

  • 我有这样的设置: 所有.飞镖只是导入脚本1.飞镖和脚本2.dart并调用它们的主要。目标是在细节下有一堆可以单独运行的脚本。此外,我想要一个单独的 all.dart 脚本,可以一次运行所有脚本。这将使调试单个脚本更简单,但仍允许所有脚本运行。 all.dart 脚本1.飞镖 脚本2.dart 所以,这是工作,我看到运行时预期的打印语句all.dart但我有两个问题。 首先,我必须在详细信息下软链接

  • 问题内容: 如何在Java中调用node.js并将console.log值保存在String变量中? 问题答案: Java应用程序可能与正在运行的Node.JS应用程序进行通信。例如,您可以在可用端口上运行Node.JS应用,而Java应用可以通过tcp套接字与之通信。 http://nodejs.org/api/net.html 或者,您可以创建一个http服务器并公开Java应用程序可以使用的