
簡単なことはわかりますが、場所/名前は覚えていません。
端末の現在の幅の変数はどこに保存されていますか?
私はこの変化について話すこの答えを見ました。 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
含むすべてのシェル変数を一覧表示します。コマンドと環境変数のみがリストされているため、およびは含まれません。COLUMNS
LINES
env
export
COLUMNS
LINES
エクスポートしてCOLUMNS
環境変数にすることができます。ただし、アプリケーションがそれを使用しているときに端末のサイズが同時に調整されている場合、この情報は最新の情報ではない可能性があることに注意してください。アプリケーションは、端末と同じ方法で端末のサイズを照会し、SIGWINCH シグナルのハンドラーを登録して情報を最新の状態に保つことができます。
1正しい内容を送ってI/W制御注文する。または電話をかけるstty size
かtput cols
。
答え3
set
「列」の下にあります。
echo $COLUMNS
または
set | grep -i columns
バッシュから。
答え4
私はおそらくあなたが変数を探していると思います$COLUMNS
。
文字を端末の全幅にわたって作成するのは単純な値ベースのループです$COLUMNS
。履歴の行に合わせて画面のサイズを変更すると、ビューが不快に見えます。