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
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 thisecho -e "\E[2F\E[2K» 2) option B\n\E[2K 3) option C"
.See more in
man console_codes
Also see the
tput
andterminfo
manpages. You find the capabilities in terminfo and you use them with tput, like fx. moving the cursor to row 10 column 10 withtput cup 10 10
, where cup is described in the terminfo manpage.You can save and restore the cursor too with
s
andu
, 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"
With ‘clear’?
clear wipes the whole console, I prefer to keep the previous lines, and only remove some of them