スクリプトを使用して端末サイズを取得しようとしたときに問題が発生しました。通常、私はコンソール内でこのコマンドを使用しますtput cols
が、厳密にスクリプトを使用してこのコマンドを実行できるようにしたいと思います。
現時点では、実行中のコンソールを検出して対応するファイルパスを取得できます。しかし、この情報を使用してコンソールの幅を取得するのは困難です。コマンドを試してみましたが、tput
Linux / Scriptingに初めて触れたので、何をすべきかわかりません。
その理由は、予約されたこと幅/列項目をコンソールに頻繁に通知します。
これは私のコードです。
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
getcolumn.sh
#!/usr/bin/env bash
echo $(/usr/bin/tput cols)
TERMINAL
&の一般的な出力TERMINALPATH
は合計です。たとえば、pts/terminalnumber
/dev/pts/terminalnumber
pts/0
/dev/pts/0
ベストアンサー1
この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
出力を直接提供することがより良いかもしれないと想像できます。より効率的で読みやすいです。