全部。如何将所有会话写入数组?(screen -ls)即:
23257.name_session1 (2017/06/25 10:41:18 PM)(已分离)
22011.name_session2 (2017/06/25 下午 07:50:33)(已分离)
arr[0] = 23257.name_session1;
arr[1] = 22011.name_session2;
示例命令:screen -ls | grep -oP '\d+.\S+' | grep -oP '(?<=\d.)\S+'
答案1
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第一场会议是最近开始的。