【问题标题】:How do I launch a java process that has the standard bash shell environment?如何启动具有标准 bash shell 环境的 java 进程?
【发布时间】:2011-11-13 08:27:07
【问题描述】:

我已尝试研究进程构建器,但我不确定如何将 bash 环境引入进程。

例如,我正在使用以下内容来启动我的流程:

Process p = new ProcessBuilder(args).start();
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

我希望我的标准 shell 环境(来自 /etc/profile、.bashrc 等)来源于该进程。

对不起,如果我没有使用正确的术语 - 仍在学习 java。

提前感谢您的帮助!

【问题讨论】:

  • 如果您还没有合适的环境,它可能是像bash -l 这样的选项。在开始 Java 之前没有 bash 环境有什么原因吗?
  • 这里不完全清楚......你的意思是你正在编写一个Java程序,它将作为子进程执行bash shell?
  • 可能执行如下命令:/usr/bin/env bash -c ". /etc/bash.bashrc; cmd"
  • @erickson 请查看更新 - 我想完全按照您在 cmets 中的说明进行操作。

标签: java bash shell process environment


【解决方案1】:

您需要使用 ProcessBuilder 设置 shell 调用。执行如下命令:

/bin/bash -l -c "The entire command line that you want to execute"

【讨论】:

    【解决方案2】:

    获取最新的Beanshell .jar 文件并将其放入您的 Javasoft/jre/lib/ext 目录。

    然后,您可以像这样运行 Java shell 脚本:

    java bsh.Interpreter myscript.bsh [args]
    

    或者,在这样的 Java 程序中:

    Object result = new bsh.Interpreter().source("myscript.bsh");
    

    注意:在第二个示例中,args 需要在命名空间中单独设置。

    【讨论】:

    • 谢谢!这种类型的 bash 环境会自动从 /etc/profile 获取标准环境还是需要单独调用?
    • 这取决于你做什么。如果您没有在 Java Beanshell 脚本中调用任何 Beanshells 动态类路径方法,则使用默认的类加载器并且可以访问 bash shell 中的环境(例如 CLASSPATH)。
    【解决方案3】:

    你可以试试,

    bash -i -c "your command"
    

    这里的 i 代表交互式屏幕,它将通过执行 ~/.bashrc file 中存在的命令开始

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多