I want to have a selector in a “case” menu, so I show the options:

   1) option A
   2) option B
   3) option C

Then read the choice (let’s say it’s B), remove the previous menu and show this instead:

   1) option A
 » 2) option B
   3) option C

How can I do this? I know we can remove the current line with echo -ne "\r", but I have no idea of how to do it with several

  • smpl
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 year ago

    It doesn’t look to me like you want to remove lines. It looks like you want to move the cursor to a position and write a character.

    You would probably want to move up two rows to column one and print the marker like this \E[2F». If you want to delete option B and C and write them again it’ll be something like this echo -e "\E[2F\E[2K» 2) option B\n\E[2K 3) option C".

    See more in man console_codes

    Also see the tput and terminfo manpages. You find the capabilities in terminfo and you use them with tput, like fx. moving the cursor to row 10 column 10 with tput cup 10 10, where cup is described in the terminfo manpage.

    • smpl
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      You can save and restore the cursor too with s and u , so that your example could be done from an interactive terminal like this.

      $ echo -en "  1) option A\n  2) option B\n  3) option C\n\E[s"
        1) option A
      » 2) option B
        3) option C
      $ echo -en "\E[3F»\E[u\E[2K"