arr=($(screen -ls | egrep -o '\t.+\t' | sort -n))
Сломать:
arr=($(...))
: присваивает серии разделенных пробелами значений индексированный массив, например, arr=($(1 2 three 4))
определяет $arr[0]=1
, $arr[1]=2
, $arr[2]=three
и $arr[3]=4
.
screen -ls
: базовая функция, выход которой должен быть отфильтрован. Это выводит следующие (примерные) строки:
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.
Обратите внимание, что пробелы в строках, содержащих подробности сеанса, представляют собой столбцы с разделителями табуляции.
egrep -o '\t.+\t'
: выбирает только выходные данные в каждой строке, которые находятся между двумя символами табуляции (включая вкладки). Это изолирует строки pid.tty.host
.
sort -n
: сортировка каждой строки по числовому порядку, от наименьшего pid к наибольшему pid.
Полученный массив содержит идентификаторы pid.tty.host
для каждого сеанса экрана (как присоединенного, так и отсоединенного), с $arr[0]
содержащим сеанс, который начался первым, до $arr[n-1]
содержащим n- й сеанс, началось совсем недавно.