奇妙に聞こえるかもしれませんが、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