在一个bash脚本中,我想将光标列放在一个变量中。看起来像使用ANSI转义码{ESC} [6n是获取它的唯一方法,例如以下方式:
- # Query the cursor position
- echo -en '\033[6n'
- # Read it to a variable
- read -d R CURCOL
- # Extract the column from the variable
- CURCOL="${CURCOL##*;}"
- # We have the column in the variable
- echo $CURCOL
不幸的是,这将打印字符到标准输出,我想静静地做。此外,这不是很便携…
有没有一个纯粹的bash方式来实现这一点?
你必须诉诸肮脏的技巧:
- #!/bin/bash
- # based on a script from http://invisible-island.net/xterm/xterm.faq.html
- exec < /dev/tty
- oldstty=$(stty -g)
- stty raw -echo min 0
- # on my system,the following line can be replaced by the line below it
- echo -en "\033[6n" > /dev/tty
- # tput u7 > /dev/tty # when TERM=xterm (and relatives)
- IFS=';' read -r -d R -a pos
- stty $oldstty
- # change from one-based to zero based so they work with: tput cup $row $col
- row=$((${pos[0]:2} - 1)) # strip off the esc-[
- col=$((${pos[1]} - 1))