java unix_在Java中运行UNIX Source命令

这是我关于stackoverflow的第一个问题,所以我会尽量保持简洁和相关.

我正在创建一个试图调用位于系统上的外部程序的Java程序,为了做到这一点,我需要调用一个shell脚本来设置相关库的链接,以确保系统是链接的在执行外部程序之前执行这些操作.

手头的问题是我无法通过Java调用shell脚本,我已经研究过高低,并且意识到使用ProcessBuilder类等替代方法.不幸的是,我对尝试通过Java调用命令行语句的世界很新,所以我很难找到答案.

我正在使用的代码示例如下:

private void analyse_JButtonActionPerformed(java.awt.event.ActionEvent evt) {

// Get project path for copying of Fortran program to folder and execution

String projectPath = Newproject_GUI.getProjectPath();

String sourcePath [] = {"/bin/sh ", "-c ","source ~/set_env_WRF_gnu.sh"} ;

Runtime fortranAnalyser = Runtime.getRuntime();

try {

Process p = fortranAnalyser.exec("cp main.exe " + projectPath);

Process k = fortranAnalyser.exec(sourcePath);

BufferedReader is = new BufferedReader(new InputStreamReader(k.getInputStream()));

String line;

while ((line = is.readLine()) != null) {

System.out.println(line);

}

} catch (IOException ex) {

Logger.getLogger(Analyser_GUI.class.getName()).log(Level.SEVERE, null, ex);

}

}

进程p工作正常,并且在调用方法时确实将main.exe复制到目标目录.然而,过程k没有,这就是问题所在.

提前致谢.

解决方法:

问题是“source”是BASH的内部命令(你使用的是“sh”,但在简化模式下它只是BASH).所以你要做的是:

>你产生新的进程“sh”并在那里找到一些东西(我想设置一些VARIABLES)

>流程结束,所有VARIABLES都丢失了

>你产生了另一个进程,但VARIABLES已经消失了

我不确定你以后是否使用这些变量,但根据脚本名称,它可能会设置一些.不要这样做.

顺便说一句,如果您只想在bash中执行脚本,则无需获取它.要获得它的副作用,只需执行以下操作:

String sourcePath [] = {"/bin/sh ", "/home/XYZ/set_env_WRF_gnu.sh"} ;

请注意你不能使用〜在这种情况下,使用Java来获得你的家庭目录.

标签:java,unix,terminal

来源: https://codeday.me/bug/20190630/1332863.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值