我正在Windows计算机上运行一个Java项目,该项目读取外壳脚本文件以获取授权令牌,但出现以下错误:
java.io.IOException:无法运行程序“ ./token.sh”:CreateProcess错误= 193,%1不是有效的Win32应用程序
Java program for reading the shell script:
private static String execCommand(String username){
String line;
Process p = Runtime.getRuntime().exec("./token.sh -u " + username + " -p password123");
BufferedReader input = new BufferedReader(new
InputStreamReader(p.getInputStream()));
StringBuilder output = new StringBuilder();
while ((line = input.readLine()) != null) {
output.append(line);
}
如何在Windows计算机上运行相同的代码。
答案 0 :(得分:1)
不会。您会看到Windows CMD和Shell中使用的命令是不同的,因为它们是完全不同的平台。即使使用Java执行,但由于根本的根本差异,它也不会执行。从您得到的异常中可以很清楚地看出。
你能做什么?
通读token.sh。最有可能是内部实现
可以在Windows中实现。然后创建一个if条件
检查System.getProperty("os.name")
然后如果它的窗口
调用bat文件,如果操作系统基于Unix,则调用sh文件。对于
其他所有操作系统都会抛出一个有效的异常。
其他可能的方法是,如果令牌在机器中生成 独立的,您可以使用SSH(JSch或类似产品)远程连接到 并获得UNIX服务器的令牌。如果令牌是机器相关的(如果 它是一个auth令牌,那么可能是),请尝试使用Cygwin解释器 ,它本身并不能保证每个shell文件都可以在其中运行 它。
答案 1 :(得分:1)
您不能这样做,因为Linux bash脚本所需的命令与Windows命令有很大不同。 例如-
要在Linux
中列出目录中的内容ls
要在Windows
中列出目录中的内容dir
您必须编写独立于计算机/体系结构/ OS的代码才能在所有操作系统上运行。
也许,您可以尝试使用Python脚本。
否则,您可以在Windows计算机上ssh切换到Linux计算机,并在Linux服务器中从Windows运行该脚本。
答案 2 :(得分:0)
您还必须对此脚本进行Windows特定的实现。最常见,最简单的方法是使用powershell。
如果您想要同时在Windows和Unix上运行的版本,也许您应该研究python。