82 votes

Variables d'environnement LIGNES et COLONNES perdues dans un script

Considérez les points suivants:

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:~$

Les variables $LINES et $COLUMNS sont des variables shell, pas les variables d'environnement, et donc ne sont pas exportés dans le processus enfant (mais ils sont automatiquement mis à jour lorsque je redimensionner la fenêtre xterm, même lorsque vous êtes connecté via ssh à partir d'un emplacement distant). Est-il un moyen dans lequel je peux laisser mon script connaissent bien la taille du terminal?

EDIT: J'ai besoin de cela comme d'une solution de contournement ne ce problème: vi (ainsi que vim, de moins en moins, et des commandes similaires) bousille l'écran à chaque fois que je l'utilise. Changer le terminal n'est pas une option, et donc je suis à la recherche de solutions de contournement (défilement vers le bas $LINES des lignes n'est sûrement pas la solution parfaite, mais au moins est mieux que de perdre l'écran précédent)

93voto

Puppe Points 2371

Vous pouvez obtenir les lignes et les colonnes de tput

 #!/bin/bash

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

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

8voto

Anthony Points 31
 eval $( resize )
 

fait ce travail ... (sur un terminal basé sur xterm)

6voto

elo Points 41
 kill -s WINCH $$
 

définit les variables.

4voto

Dennis Williamson Points 105818

Avez-vous essayé de faire dire à votre shebang:

 #!/bin/bash -i
 

2voto

ndim Points 11557

$LINES et $COLUMNS en bash est juste une coquille d'y wrapper autour de l'ATS ioctls vous donnant la taille de l'ATS et les signaux envoyés par le terminal à chaque fois que les changements de taille.

Vous pourriez écrire un programme dans un autre langage qui appelle ceux ioctls directement pour obtenir de l'ATS dimensions, et ensuite utiliser ce programme.

EDIT: eh Bien, il s'avère que le programme existe déjà et s'appelle tput. Voter Puppe de l' tput de réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X