端末の回線番号を取得するには? (「echo $COLUMNS」と比較)

端末の回線番号を取得するには? (「echo $COLUMNS」と比較)

ついにssh電話をオンにしましたが、そうした後、古代にハードコードされたスクリプトの一部が80x24の解像度にのみ非常に具体的であることに気づきました。

私はこれが$COLUMNS私に80ポイントを与え、いくつかのことをすることができることを知っていますが、私が見ている端末のさまざまな次元にアクセスできる場所がどこにあるかを知りたいです。

私は私が使用できるすべての端末、電話、またはその他のハードウェアに対してセットをハードコードしたくありませんが、今ではこれが最善の選択肢のようです。

私の電話は誰かが興味を持っている場合に備えてConnectBotを介して53x13を提供します(より良い解決策が見つかりませんか?)。

答え1

$COLUMNSfor行に対応するものは、ttyデバイスラインルール設定(通常はターミナルエミュレータによって設定されるか、その場合)に基づいて一部の$LINESシェルによって設定されます。次に、クライアントが提供する値が設定されます(送信されるかどうかわかりません)。zshbashbashsshsshdConnectBot

この情報はシェルのマニュアルページにあります。たとえばzshinfo zsh LINES

その他のオプション:

  • 一部のシステムでは(およびこれは将来のPOSIXバージョンの標準になります。)、stty size行と同じ情報を返します。場合によっては、<lines> <columns>システムごとに異なる形式で出力に表示されることがよくあります。stty -a
  • ncurses実装を介しておよびを使用して行と列の数を取得tputできます(端末デバイスから情報を取得できない場合は、terminfoデータベースを照会することに置き換えます)。tput linestput 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

関連情報