如何用java验证unix命令

时间:2014-10-08 03:16:10

标签: java shell unix

我正在编写一个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();
    }

}

1 个答案:

答案 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

为了清楚起见,这会检查语法。例如,它将测试是否存在所需的文件或命令,只有在代码存在时才会运行。