18

私の知る限り、echoのバックスペースシーケンスを使用してカーソルを左に移動することは可能です。しかし、エコーを使用してカーソルの垂直位置を変更する可能性はありますか?

4

3 に答える 3

27

このセクションでは、ANSIエスケープシーケンスについて説明します。

例:

echo -en "\033[s\033[7B\033[1;34m 7 lines down violet \033[u\033[0m"
echo -en "\033[s\033[7A\033[1;32m 7 lines up green \033[u\033[0m"

そして、このセクションでは、tputユーティリティについて説明します。

デモについては、端末のフローティングクロックを参照してください。

http://www.cyberciti.biz/tips/spice-up-your-unix-linux-shell-scripts.htmlから抜粋したサンプルスクリプト:

#!/bin/bash

tput clear      # clear the screen

tput cup 3 15   # Move cursor to screen location X,Y (top left is 0,0)

tput setaf 3    # Set a foreground colour using ANSI escape
echo "XYX Corp LTD."
tput sgr0

tput cup 5 17
tput rev        # Set reverse video mode
echo "M A I N - M E N U"
tput sgr0

tput cup 7 15; echo "1. User Management"
tput cup 8 15; echo "2. Service Management"
tput cup 9 15; echo "3. Process Management"
tput cup 10 15; echo "4. Backup"

tput bold       # Set bold mode 
tput cup 12 15
read -p "Enter your choice [1-4] " choice

tput clear
tput sgr0
tput rc

tputの例

于 2013-01-10T13:46:04.327 に答える
8

を使用echoすると、特定の端末タイプに制限されます。を使用することをお勧めしますtput

tput cup 10 4; echo there

行10、列4にカーソルを置き、その位置に「そこ」を印刷します。

より基本的な動きをtput cub1するには、左にtput cuf1移動し、右tput cuu1に移動し、上tput cud1に移動し、カーソルを下に移動する必要があります。

于 2013-01-10T13:46:15.170 に答える
1

はい、mikuが指摘しているように、ANSIターミナルはエスケープするか、少しクリーンなものがtputであり、どのターミナルでも機能するはずです。

tput cuu 1             # move cursor up 1 position
nudgeup=`tput cuu 2`   # save it for later
nudgeleft=`tput cub 2`   
echo -n $nudgeup $nudgeleft

BASHプロンプトのハウツーのANSIセクションの後のいくつかのセクションを参照してください。

tputは、サポートされていないものがあるかどうかを通知する終了コードも返します。

于 2013-01-10T13:59:02.920 に答える