現在の端末幅の環境(?)変数名は何ですか?

現在の端末幅の環境(?)変数名は何ですか?

簡単なことはわかりますが、場所/名前は覚えていません。

端末の現在の幅の変数はどこに保存されていますか?

私はこの変化について話すこの答えを見ました。 SSHとTelnetを介して端末の長さと幅はどのように渡されますか?

しかし、スクリプトで使用する現在の値を取得したいと思います(そしてその答えのすべてを理解していません)。

昔々、すべての環境変数を表示する方法があったことを覚えていますか? (まあ、set(with env)を使うように答えを見ましたが、私はset線だけを表示し、幅は表示しませんでしたか?)


その後、もちろん次の質問が出てきます。 $numberがある場合は、1文字( "-")を数回繰り返して点線をX文字の幅にしたいと思います(末尾の塗りつぶし、改行なし)。これを行う方法のエレガントな方法があれば、ありがとうございます。

答え1

サイズ

標準的な方法は、実際のサイズを知りたいときに端末に問い合わせることです。

stty size

行と列を印刷します。

点線印刷

第二の質問に関しては、seqあなたは友人ですか?

stty size|if read rows cols
then for x in `seq $cols`
do printf "-"
done fi

またはすべてのawkループ

stty size|awk '{ ORS="-"; n=$2; for (i=0; i<n; ++i) { print ""; } }'

行変数の設定

しかし、実際に行を変数に保存する方が良いです。

eval $(L=""; stty size|if read r c
    then for x in `seq $c`
    do L="${L}-"
    done
    echo L="$L"
    fi
)

SIGWINCHの罠

端末サイズを再計算する必要がない限り

trap 'echo "recalculate L"' SIGWINCH

これで$Lラインを印刷できます。もちろん、$L変数を自動的に調整することもできますSIGWINCH

trap 'eval $(L=""; stty size|if read r c
    then for x in `seq $c`
    do L="${L}-"
    done
    echo L="$L"
    fi
)' SIGWINCH

。設定した端末でtrap次のように話すことができます。

echo $L

これで終わりました。

答え2

いいえ環境端末の幅を含む変数です。一つあるシェル変数:(COLUMNSキーと同じ)。LINESこれはシェル変数にすぎず、シェルから呼び出されるプログラムには表示されません。

その理由COLUMNSは、変数が環境内にある場合、シェルはそれを変更できないため、シェル変数が環境にエクスポートされないためです。端末のサイズを変更すると、シェル(またはより一般的には前景のすべてのプログラム)はSIGWINCH信号。シェルがSIGWINCHを受信すると、端末に現在のサイズを問い合わせ、それに応じてCOLUMNS変数を更新しますLINES

このコマンドは、およびをset含むすべてのシェル変数を一覧表示します。コマンドと環境変数のみがリストされているため、およびは含まれません。COLUMNSLINESenvexportCOLUMNSLINES

エクスポートしてCOLUMNS環境変数にすることができます。ただし、アプリケーションがそれを使用しているときに端末のサイズが同時に調整されている場合、この情報は最新の情報ではない可能性があることに注意してください。アプリケーションは、端末と同じ方法で端末のサイズを照会し、SIGWINCH シグナルのハンドラーを登録して情報を最新の状態に保つことができます。

1正しい内容を送ってI/W制御注文する。または電話をかけるstty sizetput cols

答え3

set「列」の下にあります。

echo $COLUMNS

または

set | grep -i columns

バッシュから。

答え4

私はおそらくあなたが変数を探していると思います$COLUMNS

文字を端末の全幅にわたって作成するのは単純な値ベースのループです$COLUMNS。履歴の行に合わせて画面のサイズを変更すると、ビューが不快に見えます。

関連情報