this post was submitted on 28 Aug 2023
9 points (100.0% liked)

Bash

714 readers
1 users here now

Talk about the Bash Shell and Bash scripting

founded 4 years ago
MODERATORS
 

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

top 4 comments
sorted by: hot top controversial new old
[–] [email protected] 2 points 1 year ago (1 children)

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.

[–] [email protected] 1 points 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"
[–] [email protected] 1 points 1 year ago (1 children)
[–] [email protected] 1 points 1 year ago

clear wipes the whole console, I prefer to keep the previous lines, and only remove some of them