我想在特定列上的 echo 命令中移动 bash 光标,但不更改行。到目前为止我所拥有的是:
this.echo('NONE found on ' + accountName + '(' + accountPos + ')' + '\033[30f !!!');
我希望 30 是列号,但行保持不变,但出于某种原因,上面只是认为我的行号是 0,因此它将行重置为该值。
通过将光标移动到行首,然后向前移动 30 列,找到了我自己问题的答案,如下例所示:
\033[50D\033[30C My Text Goes Here
#!/bin/bash
#-###--------------------{ Printf Functions }-----------------------------###-#
XY () { printf "\e[$2;${1}H$3"; } # XY 10 10 'Hello World!' |
line () { printf -v _L %$2s; printf -- "${_L// /$1}"; } # line "+-*" 10 |
# Create sequence like {0..(X-1)} |
que () { printf -v _N %$1s; _N=(${_N// / 1}); printf "${!_N[*]}"; } # que 10 |
#-----------------------------------------------------------------------------+
function Text_# () { printf "\e[${2};${1}H${3}${4}" ;} # $1;$2 printf $3"\n" |
#-----------------------------------------------------------------------------+
#-###--------------------{ Movements Functions }--------------------------###-#
Pxy () { printf "\e[${2};${1}H${3}" ;} # from 0:0; $1;$2 echo $3"\n"
Exy () { echo -en "\e[${2};${1}H${3}" >$(tty) ;} # from 0:0; $1;$2 echo $3"\n"
Ehy () { echo -en "\e[${1}A\e[${2}C${3}" >$(tty) ;} # move up $1; right $2; echo $3"\n" no scroll
Edy () { echo -en "\e[${1}B\e[${2}C${3}" >$(tty) ;} # move dn $1; right $2; echo $3"\n" no scroll
Ern () { echo -en ""$'\033['${1}C${2}"" >$(tty) ;} # move right n
Eln () { echo -en ""$'\033['${1}D${2}"" >$(tty) ;} # move left n
Ecn () { echo -en ""$'\033['${1}G${2}"" >$(tty) ;} # move to coloumn
#-### --------------------------------------------------------------------###-#
Test_movements ()
{
line - 30;echo
echo "123456789|123456789|123456789|"
{ echo -n "1"; Ecn "30" "30\n" ;}
{ echo -n "1"; Ern "1" "3"; Ecn "30" "30"; Eln "12" "20\n" ;}
line - 30;echo
}
Test_movements
#-### -------------------------------------------------------------------------
方法不止一种,但最简单的是
HPA
(请参阅 XTerm 控制序列):
CSI Pm ` Character Position Absolute [column] (default = [row,1])
(HPA).
例如
printf '\033[30`%s\n' "My Text Goes Here"
进一步阅读:ECMA-48: 编码字符集的控制函数
以下说明如何在 bash 脚本中移动光标或在 bash 脚本(或任何文本文件)中使用 vi 文本编辑器从 bash shell(即终端)确定光标在 bash 脚本(或任何文本文件)中的当前位置。
首先,您需要使用 vi 编辑器打开 bash 脚本(或任何文本文件)。
vi bashscript.sh
如果您想使用 vi 编辑器将光标移动到 bash 脚本中的第 10 行和第 2 列,请运行以下命令(请注意,您输入“:”来输入命令)。
:cal cursor(10, 2)
如果您想使用 vi 编辑器在 bash 脚本中查看当前行和列,请运行以下命令。
:echo "Row = " line('.') ", Col = " virtcol('.')