簡単なことはわかりますが、場所/名前は覚えていません。
端末の現在の幅の変数はどこに保存されていますか?
私はこの変化について話すこの答えを見ました。 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
これで終わりました。