Come posso trovare il numero di linee verticali disponibili nel terminale?


12

Sto scrivendo uno script che mostra il registro git per una directory quando inserisco il cd. Un tale registro può essere travolgente, contenente centinaia di righe. Finora l'ho limitato a 20 righe codificate ( ... | head -n 20), che va bene sullo schermo al lavoro, ma troppo sullo schermo del MacBook più piccolo a casa.

Preferirei che il registro occupasse circa metà dello schermo (verticale) su entrambi i terminali. E anche "terminale" cambia: è il terminale Gnome al lavoro, ma iTerm2 a casa. E non uso schermo o tmux.

Come posso trovare il numero di linee verticali disponibili in un terminale dalla riga di comando?

Risposte:


20

Parametri del terminale sono memorizzati come $LINESe $COLUMNSvariabili.

Inoltre, è possibile utilizzare un programma di funzionamento a termine speciale, ad esempio tput:

tput lines  # outputs the number of lines of the present terminal window.
tput cols   # outputs the number of columns of the present terminal window.

9
LINESe COLUMNSsono impostati solo da alcune shell. bashli imposta, ma solo per una shell interattiva (e non li esporta).
mr.spuratic,

1
L'ambiente non esiste nel mio TCS. Inoltre, mi chiedo se il sistema li ripristinerebbe se si ridimensionasse la finestra del terminale. Sia tput che stty funzionano per me, quindi ho imparato qualcosa di nuovo :-)
jamesqf,

La documentazione di @jamesqf bash dice "Impostato automaticamente alla ricezione di un SIGWINCH." quindi, sì, li cambia se si ridimensiona la finestra del terminale.
Celada,

Per i settaggi automatici sopra indicati sono responsabili le seguenti opzioni shopt -s checkwinsizeaggiunte nel mio /etc/bash.bashrcfile con commento:# check the window size after each command and, if necessary, update the values of LINES and COLUMNS.
Costas

9

Questo comando dovrebbe darti il ​​numero di linee sul terminale:

stty size | cut '-d ' -f1

Alcuni sistemi potrebbero non essere implementati, stty sizequindi potresti aver bisogno di qualcosa del genere:

stty -a | tr \; \\012 | grep rows | tr -d ' rows'

1
Questo sembra molto specifico del sistema operativo. Puoi compilare l'elenco dei sistemi in cui funziona ogni incantesimo?
Warren Young,

4
Temevo che il primo potesse essere specifico del sistema operativo, motivo per cui ho aggiunto il secondo. In effetti, dopo un po 'di Google, vedo che il primo probabilmente non funzionerà su Solaris. Il secondo dovrebbe essere molto portatile. Onestamente, @Costas ' tput linessembra la risposta migliore e l'ho votata. Non lo sapevo prima.
Celada,

1
Vorrei offrire una lunga pipa sostitutiva con stty -aqualcosa del genere grep -Po 'rows \K[^;]*'osed -n 's/.*rows \([^;]*\).*/\1/p'
Costas,

@Costas in realtà, frustrante, né il mio comando né uno dei tuoi hanno funzionato su MacOS, quindi ho dovuto escogitare un altro comando (modificato). Vai a capire: MacOS emette "24 righe" invece di "righe 24"! Continuo a pensare che tput linessia molto meglio e penso che sia abbastanza portatile!
Celada,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.