Shell-Script
使用 bash 腳本獲取控制台寬度
我遇到了一個問題,我試圖通過使用腳本來獲取終端的大小。通常我會
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
並讓它直接提供其輸出。它更高效,也更容易閱讀。