与えられた画面データ
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つが破壊された場合、または追加の画面が追加された場合は、配列を再構築するようにスクリプトが更新されました。提案: ようこそ。