垂直カーソル位置を取得

垂直カーソル位置を取得

奇妙に聞こえるかもしれませんが、Bashの垂直カーソル位置を次のように設定する方法を知っています。

echo -e "\e[12H"

これにより、カーソルが12行目(1から始まる)に移動します。

それでは、Linux bashを使用してカーソル位置(行番号)を取得する方法は?この値を変数に保存して計算を実行できる場合は役立ちます。

編集する:

私が得るエラーは次のとおりです。

$ sh rowcol.sh
-en
    read: 9: Illegal option -d
                              test.sh: 12: Bad substitution

ベストアンサー1

-p代わりに、そのオプションを使用すると、echoスクリプトの中断の問題が解決されることがわかりました。テスト目的でGNU bash, version 3.00.16(1)-release (x86_64-redhat-linux-gnu)

IFS=';' read -sdR -p $'\E[6n' ROW COL;echo "${ROW#*[}"

インタラクティブにまたはスクリプトで作業する:

#!/usr/bin/env bash
function pos
{
    local CURPOS
    read -sdR -p $'\E[6n' CURPOS
    CURPOS=${CURPOS#*[} # Strip decoration characters <ESC>[
    echo "${CURPOS}"    # Return position in "row;col" format
}
function row
{
    local COL
    local ROW
    IFS=';' read -sdR -p $'\E[6n' ROW COL
    echo "${ROW#*[}"
}
function col
{
    local COL
    local ROW
    IFS=';' read -sdR -p $'\E[6n' ROW COL
    echo "${COL}"
}
tput sc         # Save cursor position
tput cup 5 10   # Move to row 6 col 11
POS1=$(pos)     # Get the cursor position
ROW1=$(row)
COL1=$(col)
tput cup 25 15  # Move to row 25 col 15
POS2=$(pos)     # Get the cursor position
ROW2=$(row)
COL2=$(col)
tput rc # Restore cursor position
echo $BASH_VERSION
echo $POS1 $ROW1 $COL1
echo $POS2 $ROW2 $COL2

出力:

$./cursor.sh
3.00.16(1) - リリース
6;11 6 11
26;16 26 16

おすすめ記事