screen -ls data の Bash メニュー

screen -ls data の Bash メニュー

与えられた画面データ

There are screens on:
    27454.world-of-dragons_SERVER   (07/05/2018 04:38:56 PM)        (Attached)
    6223.potato-wod_SERVER  (07/05/2018 10:16:12 AM)        (Attached)
    1681.potato-wod_MASTER  (07/04/2018 10:06:20 PM)        (Detached)
    30448.world-of-dragons_MASTER   (07/04/2018 09:06:01 PM)        (Detached)
4 Sockets in /var/run/screen/S-kreezxil.

スタンドアロンコンソール用のメニューを生成するスクリプトについて考えました。

#!/bin/bash

declare -a pids
declare -a names

build_arrays() {
        IDX=0
        pids=()
        names=()

        for f in $(screen -ls); do
                if [[ $f = *"MASTER"* ]]; then
                        IFS="." read -r -a data <<< "$f"
                        pids[IDX]="${data[0]}"
                        IFS="_" read -r -a name <<< "${data[1]}"
                        names[IDX]="${name[0]}"
                        ((++IDX))
                fi
        done
}

declare -p

while true; do
        build_arrays

        size=${#pids[@]}

        clear
        printf '\nSCREEN\tPID\tNAME\n'

        for (( i=0; i<${size}; i++ )); do
                printf '%s\t%s\t%s\n' ${i} ${pids[i]}  ${names[i]}
        done

        printf '\nWhich screen # would you like to resume?\nEnter to q to quit or exit\n'
        read n

        if [ $n == 'q' ]; then
                exit
        fi

        if [ $n -lt 0 || $n -gt $size ]; then
                read -p "Invalid Option: Press [Enter] to try again" readEnterkey
                continue
        fi

        screen -r ${pids[$n]}
done

質問

このスクリプトをもう少しエレガントにし、人が読みやすくすることはできますか?

2019年10月20日に修正:

画面の1つが破壊された場合、または追加の画面が追加された場合は、配列を再構築するようにスクリプトが更新されました。提案: ようこそ。

ベストアンサー1

おすすめ記事