0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

シェルスクリプト 指定した行数分出力を削除する

Posted at

はじめに

シェルをいじってると、ウィンドウが文字だらけになって面倒くさい。
かといって clear で擬似的に見えなくしても、スクロールバーが豆粒みたいになって使いづらい…
と、思ってる方向け。

あとはアニメーションに使えるかも

func.sh
#! /usr/bin/env bash

clear_screen () {
    local v
    for v in $(seq 1 $1); do
        echo -n $'\e[1A'$'\e[2K'
    done
}

エラー出力とかも丸ごと消してしまうので、
プログラムがある程度完成してから使ったほうがベター

解説

下準備として、for に使う引数をローカル変数として宣言しておき、他の変数と干渉しないようにしておきます。

Ansi Escape Sequeces
$'\e[1A' とかの変なやつは、 Ansi Escape Sequences (長いので、AnsiES にする) です。カーソル移動、出力文字の消去、文字色変更、色々できます。 使った記法はたった2つです。
記法 内容
\e[nA カーソルをn行上に移動
\e[2K 行全体を消去

他の AnsiES は、下記のリンクを参照してください。
ANSIエスケープシーケンス チートシート
これを見れば、AnsiES の記法が全て理解できます。
bashやzshなどのターミナル上で動作するアニメーションの作り方
bashでコマンドが無い時にやる夫が動いて煽ってくる
AnsiES を活用した、アニメーションのプログラムです。

関数の解説に戻ります。
AnsiES の力を借りたことにより、 「カーソルを1行上に移動し、行全体を削除する」を for文で制御することができました。

使用例1 指定した行数分出力を削除

test.sh
#! /usr/bin/env bash
. ./func.sh

for i in {0..9}; do
    echo 'hello world' $i
done

clear_screen 4
実行結果
hello world 0
hello world 1
hello world 2
hello world 3
hello world 4
hello world 5

使用例2 フレームを再表示するアニメーション

dance.sh
#! /usr/bin/env bash
. ./func.sh

head=' (^o^) '

body=(
    ' __|__ '
    '/  |  \'

    ' __|__/'
    '/  |   '

    '\__|__ '
    '   |  \'

    '\__|__/'
    '   |   '
)

foot=(
    '  / \  '
    ' _\ /_ '

    '  / \  '
    ' _\  \_'

    '  / \  '
    '_/  /_ '

    '  / \  '
    '_/   \_'
)


echo "$head"
for i in {0..59}; do
    rand_num_1=$(($RANDOM % 4))
    rand_num_2=$(($RANDOM % 4))

    for j in {0..1}; do
        var_name=body[$(($rand_num_1 * 2 + $j))]
        echo "${!var_name}"
    done

    for j in {0..1}; do
        var_name=foot[$(($rand_num_2 * 2 + $j))]
        echo "${!var_name}"
    done

    sleep 0.1
    if [ "$input" = 'q' ]; then break; fi
    clear_screen 4
done
実行結果
自分で実行した方がわかりやすいかもです。

謝礼

リンクを貼らせてもらった方々に感謝いたします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?