arr=($(screen -ls | egrep -o '\t.+\t' | sort -n))
Divisão:
arr=($(...))
: Atribui uma série de valores delimitados por espaço em branco a uma matriz indexada, por exemplo, arr=($(1 2 three 4))
define $arr[0]=1
, $arr[1]=2
, $arr[2]=three
e $arr[3]=4
.
screen -ls
: A função base cuja saída deve ser filtrada. Isso gera as seguintes linhas (exemplo):
There are screens on:
79481.ttys000.macbook (Detached)
80513.ttys004.macbook (Attached)
79513.ttys002.macbook (Detached)
3 Sockets in /var/folders/ht/0ty_c8mx16v69csh949g3rvr0000gn/T/.screen.
Observe que o espaço em branco nas linhas que contêm os detalhes da sessão são colunas delimitadas por tabulação.
egrep -o '\t.+\t'
: Seleciona apenas a saída em cada linha que fica entre dois caracteres de tabulação (inclui as guias). Isso isola as strings pid.tty.host
.
sort -n
: Classifique cada linha por ordem numérica, desde o menor pid até o maior pid.
A matriz resultante contém os identificadores pid.tty.host
para cada sessão de tela (anexada e desanexada), com $arr[0]
contendo a sessão iniciada primeiro, até $arr[n-1]
contendo o n th sessão, iniciada mais recentemente.