1. ホーム
  2. bash

スクリプトで失われたLINESとCOLUMNSの環境変数

2023-08-08 05:47:56

質問

次のように考えてください。

me@mine:~$ cat a.sh 
#!/bin/bash
echo "Lines: " $LINES
echo "Columns: " $COLUMNS
me@mine:~$ ./a.sh 
Lines: 
Columns: 
me@mine:~$ echo "Lines: " $LINES
Lines:  52
me@mine:~$ echo "Columns: " $COLUMNS
Columns:  157
me@mine:~$ 

変数 $LINES$COLUMNS はシェル変数です。 ではなく 環境変数であるため、子プロセスにエクスポートされません (しかし、リモートから ssh でログインした場合でも、 xterm ウィンドウのサイズを変更すると自動的に更新されます)。私のスクリプトに現在のターミナル サイズを知らせることができる方法はありますか?

EDIT。 私は、回避策としてこれを必要とします。 この問題 : vi (vim、less、および類似のコマンドと同様) を使用するたびに画面がめちゃくちゃになります。ターミナルを変更することはオプションではないので、回避策を探しています (下にスクロールする $LINES の行を下にスクロールすることは確かに完璧な解決策ではありませんが、少なくとも前の画面を失うよりはましです)。

どのように解決するのですか?

行と列を取得するには tput :

#!/bin/bash

lines=$(tput lines)
columns=$(tput cols)

echo "Lines: " $lines
echo "Columns: " $columns