Shell-Script

使用 bash 腳本獲取控制台寬度

  • August 5, 2020

我遇到了一個問題,我試圖通過使用腳本來獲取終端的大小。通常我會tput cols在控制台中使用命令,但是我希望能夠通過嚴格使用腳本來完成此功能。

截至目前,我能夠檢測到正在執行的控制台並獲取其文件路徑。但是我正在努力使用這些資訊來獲取控制台的寬度。我嘗試使用 command tput,但我對 Linux/腳本相當陌生,因此不知道該怎麼做。

這樣做的原因是我希望能夠設置一個cron條目,每隔一段時間通知控制台它的寬度/列。

到目前為止,這是我的程式碼:

tty.sh

#!/bin/bash

#Get PID of terminal
#terminal.txt holds most recent PID of console in use
value=$(</home/test/Documents/terminal.txt)

#Get tty using the PID from terminal.txt
TERMINAL="$(ps h -p $value -o tty)"
echo $TERMINAL

#Use tty to get full filepath for terminal in use
TERMINALPATH=/dev/$TERMINAL
echo $TERMINALPATH

COLUMNS=$(/home/test/Documents/get_columns.sh)
echo $COLUMNS

get_columns.sh

#!/usr/bin/env bash
echo $(/usr/bin/tput cols)

TERMINAL&的正常輸出TERMINALPATH是and ,例如&pts/*terminalnumber*``/dev/pts/*terminalnumber*``pts/0``/dev/pts/0

tput命令是一個出色的工具,但遺憾的是它無法檢索任意選擇的終端的實際設置。

這樣做的原因是它讀取標準輸出的終端特徵,這也是它寫答案的地方。因此,當您嘗試擷取您的輸出時,tput cols也刪除了其資訊的來源。

幸運的是,stty讀取標準輸入而不是標準輸出來確定終端特徵,因此您可以通過以下方式檢索所需的大小資訊:

terminal=/dev/pts/1
columns=$(stty -a <"$terminal" | grep -Po '(?<=columns )\d+')
rows=$(stty -a <"$terminal" | grep -Po '(?<=rows )\d+')

順便說一句,把它寫成echo $(/usr/bin/tput cols).

echo $(some_command)對於您正在執行some_command並擷取其輸出的任何構造,然後將其傳遞echo給輸出。在幾乎每一種情況下,您都可以想像您可能只是執行some_command並讓它直接提供其輸出。它更高效,也更容易閱讀。

引用自:https://unix.stackexchange.com/questions/299067