我正在尝试使用 Cygwin 从 Windows 操作系统运行 shell 脚本。当我从命令提示符运行时,它工作正常,因为我深入了解 C:\cygwin\bin 并运行 sh my_script.sh。
当我通过代码尝试此操作时出现以下错误
C:\Java\jdk1.6\bin>java CmdProcessBuilder
Exception in thread "main" java.io.IOException: Cannot run program "C:\cygwin\bi
n\my_script.sh": CreateProcess error=193, %1 is not a valid Win32 application
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at CmdProcessBuilder.main(CmdProcessBuilder.java:13)
Caused by: java.io.IOException: CreateProcess error=193, %1 is not a valid Win32
application
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
at java.lang.ProcessImpl.start(ProcessImpl.java:30)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 1 more
以下是代码:
public static void main(String args[])
throws InterruptedException,IOException
{
List<String> command = new ArrayList<String>();
command.add(System.getenv("cygwin") +"\\bin\\"+"sh my_script.sh");
ProcessBuilder builder = new ProcessBuilder(command);
final Process process = builder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
System.out.println("Program terminated!");
}
当我在命令提示符下尝试cd cygwin\bin\sh my_script.sh时,它没有执行,并给出错误消息系统找不到指定的路径。
最佳答案
您可能会像这样使用 Runtime.exec
获得更好的运气:
String fs = System.getProperty("file.separator");
String command = System.getenv("cygwin") + fs + "bin" + fs + "sh my_script.sh";
Process p = Runtime.getRuntime().exec(command);
避免在路径中使用依赖于平台的字符串也是一种很好的做法。
关于java - 无法运行 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8208657/