Bash非滚动终端输出



一些程序生成bash的输出,用户体验到的方式类似于更改值的字符串,而不是打印的行(bash向下滚动以显示所有更改的输出)。这种现象叫什么?它是如何在java程序或bash脚本中实现的。如何解析输出?它只是打印新行,但使用了一些特殊功能吗?

top是一个使用这种输出数据的"现象"的程序


使用Okey游标。

那么我如何用java解析它们呢?我试过这个代码,但它没有打印任何

public static void exeTest(String [] args) throws IOException{
        if (args.length <= 0) {
            System.out.println("empty command");
            return;
        }
       Process process = new ProcessBuilder(args).start();
       InputStream is = process.getInputStream();
       InputStreamReader isr = new InputStreamReader(is);
       BufferedReader br = new BufferedReader(isr);

       System.out.printf("Output of running %s is:", 
          Arrays.toString(args));
       String line;
       while ((line = br.readLine()) != null) {
            System.out.println(line);
       }

感谢所有的好答案,我现在对这个主题更加熟悉了——即使是你——我仍然无法解析像java中顶部的程序输出。我将结束这个问题,并进一步研究如何在java中解析它。然后,我可以开始另一个更具体的例子,用java解析输出。

不打印整行(与println或打印%n一样),而是写退格字符(b)或不换行的空回车(r),以将光标移回要打印的内容的前面。

由于您已经用bash标记了这个问题,我假设您正在运行linux/cygwin。因此,该终端很可能与ANSI兼容。在这种情况下,您还可以使用ANSI转义序列。。。

例如:

echo -e "Hello worldrHi"
# Produces "Hillo world" since the line is not cleared before printing "Hi".
echo -e "Hello worldre[KHi"
#produces "Hi" (prints "Hello world", goes to 1st column, clears to last column, prints "Hi")
# For more details, refer above link.

如果您需要在循环中运行它(这是最明显的情况),请确保

  1. 您不在消息字符串后放换行符,或者
  2. 使用ANSI转义序列-"\e[A"(或"\e[<n>A",其中n=行数)恢复垂直光标移动(由于"\n")

注:

上面给出的代码是bash命令。对不起,我对java语法不太熟悉,但据我所知,

  1. echo将被转换为System.out.println
  2. 使用System.out.printf可以实现没有最后一行换行符的回波
  3. &e是指<ESC>字符(ascii=27),可以用java字符串中的33来实现

这可以用你说的方式完成,我的意思是打印新行。想象一下你有一个循环:

String header = "Current val:";
String buffer = "";
for(int i = 0; i < val; i++) {
    buffer = header + " " + i + "n";
    buffer += (val - i) + "iterations leftn";
    //add other strings to buffer...
    //Clear console here
    //Print buffer
}

因此,随着变量的变化,输出将看起来是静态的。

另一种更强大的方法是使用类似goto(x, y)的函数进行精确的输出操作。Java在标准api中没有这一点,但有一些库可以使用它。控制台应用程序的Java gotoxy(x,y)

curses可以用来实现这一点。搜索"java诅咒"one_answers"bash诅咒"会产生良好的结果。


Java:

http://sourceforge.net/projects/javacurses/

什么';对于终端应用程序来说,这是一个很好的Java库吗?

什么';在Java中获得文本用户界面(类似ncurses)功能的最佳方式是什么?

对于Bash:

https://code.google.com/p/bashsimplecurses/

最新更新