在 bash 中将光标位置移动到特定列

问题描述 投票:0回答:4

我想在特定列上的 echo 命令中移动 bash 光标,但不更改行。到目前为止我所拥有的是:

this.echo('NONE found on ' + accountName + '(' + accountPos + ')' + '\033[30f !!!');

我希望 30 是列号,但行保持不变,但出于某种原因,上面只是认为我的行号是 0,因此它将行重置为该值。

bash escaping echo ansi-escape
4个回答
2
投票

通过将光标移动到行首,然后向前移动 30 列,找到了我自己问题的答案,如下例所示:

\033[50D\033[30C My Text Goes Here

0
投票
#!/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

 #-### -------------------------------------------------------------------------

-2
投票

方法不止一种,但最简单的是

HPA
(请参阅 XTerm 控制序列):

CSI Pm `  Character Position Absolute  [column] (default = [row,1])
          (HPA).

例如

printf '\033[30`%s\n' "My Text Goes Here"

进一步阅读:ECMA-48: 编码字符集的控制函数


-2
投票

以下说明如何在 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('.')
© www.soinside.com 2019 - 2024. All rights reserved.