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

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

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

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

私はこの変化について話すこの答えを見ました。 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

これで終わりました。

おすすめ記事