Java,Runtime.exec或ProcessBuilder:如何知道文件是shell还是二
我正在寻找一种最有效的方式来决定:
>我应该预先提供用户提供的命令行与shell可执行文件 众所周知,要从Java启动shell脚本,应该启动shell: ProcessBuilder pb = new ProcessBuilder("/bin/sh","script.sh","arg1","arg2); 要启动一个二进制文件,应该启动二进制本身: ProcessBuilder pb = new ProcessBuilder("/path/binary","arg2); 如果使用shell执行二进制文件,则会产生错误: ProcessBuilder pb = new ProcessBuilder("/bin/sh","/path/binary","arg2); (sh: cannot execute binary file) 如果shell脚本在没有shell二进制的情况下执行,则会产生错误: ProcessBuilder pb = new ProcessBuilder("script.sh","arg2); (error 2: file not found) 我处于一种情况,我的应用程序不知道它的开始,二进制或脚本. 已启动的应用程序是由最终用户提供的事件处理程序.它最有可能是在Unix下执行的shell脚本;但它可以是Windows下的* .cmd,或者在某些晦涩的平台下执行的Perl脚本.毕竟是Java. 我的第一个天真的尝试是用shell启动命令行,看看它是否有效.如果没有,请尝试以二进制形式执行. 这是丑陋和危险的:在平台和shell的一些未知的组合下,第二次运行可能仍然执行脚本,第二次,具有不可预测的结果. 另外,当我无法启动它时,我无法确定脚本何时启动,并且由于自身的某些问题而失败. 我现在考虑的最好的事情是: >阅读脚本并查找任何不可打印的字节 请告知您是否有更好的想法. 更新/部分解决方案 感谢所有与我分享他们想法的人. 原来,我已经困惑了自己和互联网的其余部分:) 在用户输入的命令行之前,不需要在前面加上二进制文件: >脚本在PATH中 当我测试我的代码时,这些条件中的一个或另一个没有达到. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |