在同一行中发送多个命令

Art*_*hur 6 spring-shell

有没有办法使用 spring-shell 在同一行上发送多个命令。例如:

shell> add 1 2; add 3 4
3
7
Run Code Online (Sandbox Code Playgroud)

我注意到如果我从 运行我的应用程序Intellij,我可以复制粘贴几个命令,它会正常工作:

add 1 2
add 3 4
Run Code Online (Sandbox Code Playgroud)

但是当我在 bash 中运行可执行 jar 时它不起作用。我想这是因为它Terminal是不同的。在Intellij它的 a 中DumbTerminal,当我在 bash 中运行它时,它是一个PosixSysTerminal

Cod*_*mon 1

根据脚本命令接受本地文件作为参数,并将一次一个地重播在那里找到的命令。从文件中读取的行为与交互式 shell 中的行为完全相同,因此以 // 开头的行将被视为注释并被忽略,而以 \ 结尾的行将触发行继续。在 spring 中,不可能在一行上传递多个命令- shell 中,但是您可以修改函数以接收字符串然后拆分它或接收字符串数组,然后自己处理字符串或数组。

@ShellMethod("Add or subtract ,two integers together.")
    public static String add(String args) {
     args=args.trim();
    String output="";
    if(args.contains(";")){
        for(String arg:args.split(";"))
        {
              arg=arg.trim();
   
            if(arg.split(" ").length==3)
            {
                int first_fig=0;
                int second_fig=0;
                try{
                    first_fig=Integer.parseInt(arg.split(" ")[1]);
                    second_fig=Integer.parseInt(arg.split(" ")[2]);
                }catch (Exception ex){
                  //  System.out.println("Invalid Argument");
                    output+="Invalid Argument\n";
                    continue;
               
                    

                }
                if(arg.split(" ")[0].equalsIgnoreCase("add"))
                {
                    output+= (first_fig+second_fig)+"\n";
                    continue;
                  
                    

                }else  if(arg.split(" ")[0].equalsIgnoreCase("subtract"))
                {
                    output+= (first_fig-second_fig)+"\n";
                    continue;
                }else{
                    output+="Invalid Argument\n";
                    continue;

                }

            }else{
                output+="Invalid Argument\n";
                continue;
            }

        }
    }else{
        if(args.split(" ").length==3) {
            int first_fig = 0;
            int second_fig = 0;
            try {
                first_fig = Integer.parseInt(args.split(" ")[1]);
                second_fig = Integer.parseInt(args.split(" ")[2]);
            } catch (Exception ex) {
                output+="Invalid Argument\n";
          
            }
            if (args.split(" ")[0].equalsIgnoreCase("add")) {
               
                output+= (first_fig+second_fig)+"\n";

            } else if (args.split(" ")[0].equalsIgnoreCase("subtract")) {
            
                output+= (first_fig-second_fig)+"\n";
            } else {
              //  System.out.println("Invalid Argument");
              
                output+="Invalid Argument\n";

            }
        }else{
           // System.out.println("Invalid Argument");
         
            output+="Invalid Argument\n";
        }
    }

    return output;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以轻松地调用它,如下所示:

shell> add 1 2; add 3 4
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的回答,这很有趣。但我想避免自己实现 CLI 逻辑(解析参数等)。 (2认同)