如何计算screen-ls的输出?

如何计算screen-ls的输出?

全部。如何将所有会话写入数组?(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第一场会议是最近开始的。

相关内容