ついにssh
電話をオンにしましたが、そうした後、古代にハードコードされたスクリプトの一部が80x24の解像度にのみ非常に具体的であることに気づきました。
私はこれが$COLUMNS
私に80ポイントを与え、いくつかのことをすることができることを知っていますが、私が見ている端末のさまざまな次元にアクセスできる場所がどこにあるかを知りたいです。
私は私が使用できるすべての端末、電話、またはその他のハードウェアに対してセットをハードコードしたくありませんが、今ではこれが最善の選択肢のようです。
私の電話は誰かが興味を持っている場合に備えてConnectBotを介して53x13を提供します(より良い解決策が見つかりませんか?)。
答え1
$COLUMNS
for行に対応するものは、ttyデバイスラインルール設定(通常はターミナルエミュレータによって設定されるか、その場合)に基づいて一部の$LINES
シェルによって設定されます。次に、クライアントが提供する値が設定されます(送信されるかどうかわかりません)。zsh
bash
bash
ssh
sshd
ConnectBot
この情報はシェルのマニュアルページにあります。たとえばzsh
:info zsh LINES
。
その他のオプション:
- 一部のシステムでは(およびこれは将来のPOSIXバージョンの標準になります。)、
stty size
行と同じ情報を返します。場合によっては、<lines> <columns>
システムごとに異なる形式で出力に表示されることがよくあります。stty -a
ncurses
実装を介しておよびを使用して行と列の数を取得tput
できます(端末デバイスから情報を取得できない場合は、terminfoデータベースを照会することに置き換えます)。tput lines
tput cols
いくつかの
xterm
同様の端末エミュレータ(ConnectBotの場合はわかりません)を使用すると、\e[18t
一部のエスケープシーケンス()を介して端末サイズを照会できます。たとえば、次のようになりますzsh
。IFS=";" read -sd t $'ignore?\e[18t' lines cols
$lines
とに次元を保存します$cols
。\e[18t
ほとんどの端末では、カーソルを画面の右下隅に移動してそこからカーソル位置を照会する代わりに(より一般的な)エスケープシーケンスを使用することも可能です。これは、tty設定をその設定に合わせて、まだこれを実行していないシェルの環境変数を設定するために使用できるユーティリティで提供されるresize
実際の機能です。xterm
$LINES
$COLUMNS
eval "$(resize -u)"
答え2
stty size
現在の端末の行数と列数を出力します。行数を抽出するには、最初のフィールドのみを保持します。
stty size | cut -d\ -f1