bash で複数のダイアログ画面を使用してスクリプトを作成しています。スクリプトの機能の 1 つは、特定のプロセスを強制終了する必要があります。すべての PID 値を pid という 1 つの配列にロードします。
pid = ('1234' '1233' '1232' '1231' '1230')
次に、プロセスのリストを含むダイアログ チェックリストをユーザーに提示します。それらのいくつかを選択すると、ダイアログはチェックリストのエントリ番号 (0、2、4 など) を返します。
私の最初の計画は、選択したエントリを 2 番目の配列に保存し、それを使用して最初の配列から特定の PID を取得することでしたが、これまでのところ、何も試していません。この場合は、1234、1232、1230 になります。だから私はそれらの特定のプロセスを殺すことができます。
誰かがより良い解決策を持っていますか? ダイアログチェックリストでユーザーが行った選択に基づいて、プロセスを強制終了する最も簡単な方法が必要です。
問題の関数は次のとおりです。
stop_tunnel() {
local tunnels
local pid
declare -a tunnels
declare -a pid
#this is executed on a remote system in the real script
ps aux | grep -w ssh > $_temp
awk -F "ssh" '{print "ssh" $2}' $_temp > $_temp1
awk '{print $2}' $_temp > $_temp2
IFS='
'
tunnels=( $( < $_temp1 ) )
pid=( $( < $_temp2 ) )
dialog --checklist "Select tunnel to stop:" 10 72 0 \
0 "${tunnels[0]}" off \
1 "${tunnels[1]}" off \
2 "${tunnels[2]}" off \
3 "${tunnels[3]}" off \
4 "${tunnels[4]}" off \
2>$_temp
nr=$( < $_temp )
dialog --title " Tunnel stop " --msgbox "\nYou stopped these tunnels: ${nr[@]}" 6 44
}
nr 配列は、ユーザーの選択を保持します。そして、それを使用して、特定のメンバーを pid 配列から取り出したいと考えました。