스크린 세션의 창에 대한 정보(제목, 생성 시간, 표시되는 콘텐츠)를 어떻게 얻을 수 있습니까? 이 작업은 스크립트에서 수행해야 하므로 키 바인딩이나 대화형 명령을 찾지 않습니다.
tmux와 같은 것이 list-windows
좋을 것입니다.
답변1
답변2
Ctrl-a w
지침에 따라 순서를 시도해 보세요 .여기.
개인적으로 저는 이 정보를 항상 화면 하단(예: Windows 작업 표시줄)에 유지하는 .screenrc 파일을 사용합니다. 내 화면 구성(~/.screenrc)은 다음과 같습니다.
hardstatus on
hardstatus alwayslastline
hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a "
답변3
GNU 화면에서 모든 창 목록을 가져오고 전환할 창을 선택하는 기본 키 바인딩은 다음과 같습니다.
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
}