画面セッション内のウィンドウに関する情報 (タイトル、作成時間、表示されるコンテンツ) を取得するにはどうすればよいですか? これをスクリプトで実行する必要があるため、キー バインディングや対話型コマンドは必要ありません。
tmux のようなものがlist-windows
素晴らしいでしょう。
答え1
答え2
Ctrl-a w
指示に従ってシーケンスを試してくださいここ。
個人的には、この情報を常に画面の下部に表示する .screenrc ファイルを使用しています (Windows タスク バーのように)。私の画面構成 (~/.screenrc) は次のようになります。
hardstatus on
hardstatus alwayslastline
hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a "
答え3
GNU Screen では、すべてのウィンドウのリストを取得して (切り替えるウィンドウを 1 つ選択する) ためのデフォルトのキー バインディングは次のとおりです。
C-a "
答え4
ついにできた!
これをスクリプトで実行する必要があります...
導入
5つのウィンドウを開き、ウィンドウを閉じました
#2
問題のある名前のファイルを開いた4$ esp32.pdf
窓内#3
...
screen -Q windows
0$ man screen 1*$ user@host$ 3$ pdfread: 4$ esp32.pdf 4-$ root@server#
この文字列は使用不可能に近いです!(詳細は、私のより高速な機能。
私の解決策は、関数として
一部のウィンドウ タイトルに次のような文字列が含まれている場合でも、開いているウィンドウの正しいリストを取得したいと考えました...2*$...
。
0
以下は、 からまで99
(デフォルト)の既存のウィンドウ番号を検索する関数です。
getWinList() {
if [[ $1 == -v ]]; then
local -n _outar="$2";shift 2
else local _outar
fi
_outar=()
local _string _pointer _maxid=${1:-99}
case $_maxid in
'' | *[!0-9]* )
cat <<EOUsage
Usage:
$FUNCNAME [-v <varname>] [INT]
-v varname Populate array "$varname" with window list
[INT] Optional last ID to check for existence (default 99)
EOUsage
return 1
;;
esac
for ((_pointer=0;_pointer<=_maxid;_pointer++)); do
_string=$(screen -p $_pointer -Q title) &&
printf -v _outar[_pointer] %s "$_string"
done
printf >&2 '\e[A\n\e[K'
[[ ${_outar[@]@A} != declare\ -a\ _outar=* ]] ||
for _pointer in ${!_outar[@]};do
printf ' %6s: %s\n' "[$_pointer]" "${_outar[_pointer]}"
done
}
オプションを使用して-v
結果を配列変数と、テストするオプションのウィンドウ番号を追加します。
5 つのウィンドウを開き、ウィンドウ 2 を閉じて、ウィンドウ 3 で問題のある名前のファイルを開きました...
getWinList
[0]: man screen
[1]: user@host$
[3]: pdfread: Little 4$ esp32.pdf
[4]: root@server#
getWinList 3
[0]: man screen
[1]: user@host$
[3]: pdfread: 4$ esp32.pdf
getWinList -v array 10
declare -p array
declare -a array=([0]="man screen" [1]="user@host\$" [3]="pdfread: 4\$ esp32.pdf" [4]="root@server#")
より速いが信頼性は低い:
そのまま
- 出力に基づいて、
screen -Q windows
電流によって制限されます窓幅、 - に基づく正規表現これに一致するウィンドウタイトル再結果の配列が壊れる可能性があります。
getWinListFast() {
if [[ $1 == -v ]]; then
local -n _outar="$2";shift 2
else local _outar
fi
_outar=()
if [[ $1 ]]; then
cat <<EOUsage
Usage:
$FUNCNAME [-v <varname>]
-v varname Populate array "$varname" with window list
EOUsage
return 1
fi
. <(screen -Q windows |
sed '
:a;
s/^\(.*\n\|\)\([0-9]\+\)[*!-]*$ \(\([^ ]\| [^ ]\)\+\)\( \(.*\)\|\) *$/\1[\2]="\3"\n\6/;
ta;
s/[|$]/\\&/g;
s/.*/_outar=(&)\n/')
printf >&2 '\e[A\n\e[K'
[[ ${_outar[@]@A} != declare\ -a\ _outar=* ]] ||
for _pointer in ${!_outar[@]};do
printf ' %6s: %s\n' "[$_pointer]" "${_outar[_pointer]}"
done
}