我正在编写一个java程序,它接受命令并在unix shell中运行它。我已经设法获得输出,但我需要程序来检测给定的命令是否无效,现在,如果我输入无效的命令,它会给我一个错误。否则,它运作正常。任何人都可以帮助我吗?这是我的代码:
public class TestCommand {
public static void main(String[] args) {
TestCommand obj = new TestCommand();
String sentence ="";
Scanner scn = new Scanner(System.in);
while (sentence != " ")
{
if (sentence !="exit")
{
System.out.println("> ");
sentence = scn.nextLine();
String outPut = obj.executeCommand(sentence);
System.out.println(outPut + "\n");
}
else
{
System.exit(2);
}
}
}
private String executeCommand(String sentence)
{
StringBuffer output = new StringBuffer();
Process p;
try
{
p = Runtime.getRuntime().exec(sentence);
p.waitFor();
BufferedReader bfrd = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = bfrd.readLine())!= null)
{
output.append(line);
}
bfrd.close();
}
catch (Exception e) {
e.printStackTrace();
}
return output.toString();
}
}
答案 0 :(得分:4)
Unix shell语言非常复杂。在java中重新实现足够的以测试正确性将是一项艰巨的任务。如果您只是想知道某些shell代码语法是否正确,可以将bash
与-n
选项一起使用:
bash -n file_with_code_to_test
或者:
bash -n -c string_with_code_to_test
这里的关键是-n
选项。它告诉bash
读取命令并检查它们的语法,而不用执行它们。因此,这是安全的。
您可以像java
命令一样从bash
运行这些命令。
bash
将返回退出代码0
。如果不是,它将打印错误消息并返回退出代码1
。
为了清楚起见,这会检查语法。例如,它将不测试是否存在所需的文件或命令,只有在代码存在时才会运行。