我想要实现两件事:
我正在Windows7上运行cygwin以执行我的unix shell命令,我需要编写一个Java应用程序来自动化这个过程。我已经知道如何使用Java通过“Process类”和
Runtime.getRuntime().exec("cmd /c dir")
使用Windows shell。我需要能够执行相同的unix命令,例如:ls -la
等。我应该研究什么?有没有一种方法可以记住shell的状态? 解释:当我使用
Runtime.getRuntime().exec("cmd /c dir")
时,我总是会得到我的主目录列表。如果我执行Runtime.getRuntime().exec("cmd /c cd <some-folder>")
,然后再次执行Runtime.getRuntime().exec("cmd /c dir")
,我仍然会得到我的主文件夹的列表。有没有办法告诉进程记住它的状态,就像普通的shell一样?
看起来Paŭlo提出的命令行似乎不起作用:
C:\cygwin\bin>bash -c ls -la
-la: ls: command not found
我在理解技术细节方面遇到了麻烦。
这是我的代码:
p = Runtime.getRuntime().exec("C:\\cygwin\\bin\\bash.exe -c ls -la");
reader2 = new BufferedReader(new InputStreamReader(p.getInputStream()));
line = reader2.readLine();
line
最终变成了 null 值。
我把这个东西添加到我的 .bash_profile 文件中:
#BASH
export BASH_HOME=/cygdrive/c/cygwin
export PATH=$BASH_HOME/bin:$PATH
我还添加了以下内容:
系统属性 -> 高级 -> 环境变量 -> 用户变量 -> 变量名称:
BASH
,变量值:c:\cygwin\bin
但仍然没有任何反应...
但是,如果我执行以下操作,则可以正常工作!
p = Runtime.getRuntime().exec("c:\\cygwin\\bin\\ls -la ~/\"Eclipse_Workspace/RenameScript/files copy\"");
ls.exe
似乎可以工作。 - Paŭlo Ebermann