Shell 如何编写像Top这样的交互式程序?

Shell 如何编写像Top这样的交互式程序?,shell,terminal,interactive,Shell,Terminal,Interactive,运行时,您将输入位于终端中的交互式显示,但命令行已消失 我想用这种显示器制作一个程序,但我甚至不知道要研究什么 我从哪里开始 top最初发布时使用,但由于与诅咒相关的开销,后来切换到自己的屏幕管理代码 有关top的更多信息,请参见以下链接: 总体而言,您要查找的内容属于(基于文本的用户界面)类别 大多数情况下,对于希望在终端中包含“图形”的文本表示的人来说,goto建议是最常见的 不过,有几种不同的选择,我建议谷歌找到一个合适的库供您使用。首先,请查看以下列出的链接: 出于教

运行时,您将输入位于终端中的交互式显示,但命令行已消失

我想用这种显示器制作一个程序,但我甚至不知道要研究什么

  • 我从哪里开始
top
最初发布时使用,但由于与诅咒相关的开销,后来切换到自己的屏幕管理代码

有关top的更多信息,请参见以下链接:


总体而言,您要查找的内容属于(基于文本的用户界面)类别


大多数情况下,对于希望在终端中包含“图形”的文本表示的人来说,goto建议是最常见的

不过,有几种不同的选择,我建议谷歌找到一个合适的库供您使用。首先,请查看以下列出的链接:


出于教育目的,我提出了一个不完善但可用的程序,可以捕捉bash中的箭头键并立即响应:

#!/bin/bash 

# Put terminal into canonical mode with noecho 
# (not required for this example but perhaps useful nonethless )
MYTERMRESTORE=$(stty --save)
stty icanon -echo

# Obtain terminal dimensions 
columns=$(tput cols)
lines=$(tput lines)

# Populate a buffer and store its size
buffer="$(ps aux)"
scroll="${#buffer}"

# Set a top bar and scrolling region (printf "\033[2;${lines}")
tput csr 1 "${lines}"
while [ "${#x}" -lt "$columns" ]
do x="$x="
done
printf "$x\n"

# Set up a continuos loop
while [ 1 ]
do  printf "%.*s"  $scroll  "$buffer"
    printf "\n\nUse arrow keys to toggle through output, q to quit\n"
    read -n 1 i
    case "$i" in
        '[')
             read  -n 1 j
             case "$j" in
                  "A") # Up arrow
                       scroll=$(( scroll - $columns ))
                   ;;
                  "B") # Down arrow
                       scroll=$(( scroll + $columns ))
                   ;;
             esac
             ;;
        'q') break
             ;;
    esac
done


stty "$MYTERMRESTORE"

也许这个程序需要的最直接的改进是一种持续更新缓冲区的机制。在使用异步多路复用用户输入的程序中,这通常通过使用
select()

ncurses来实现:我认为您必须开始检查vt100控制字符的输出定位(ps.yup,ncurses)。您可以查找ncurses或俚语库。它们为创建此类接口提供了构建块。我更新了答案,使用bashshell实现了top的开始阶段。你可能想看看。