У меня есть следующий скрипт:
#!/usr/bin/env ksh93
typeset -C g_info_struct
netstat -Aan | grep LISTEN | awk '{print $1,$5}' |
while read pcb port; do
out=$(rmsock $pcb tcpcb)
port=${port##*.}
pid=$(echo "${out}" | sed -n 's/.*pro[c]*ess \([0-9][0-9]*\) .*/\1/p')
if [[ -n ${pid} ]]; then
g_info_struct.proc=$(ps -o comm= -p ${pid})
g_info_struct.pid=${pid}
g_info_struct.port=${port}
server_info_list=(${server_info_list[*]} ${g_info_struct})
else
continue
fi
done
print "server_info_list content: ${server_info_list[*]}"
for index in ${!server_info_list[*]}; do
echo "Index: ${index}"
echo "Process: ${server_info_list[$index].proc}"
echo "PID: ${server_info_list[$index].pid}"
echo "Port: ${server_info_list[$index].port}"
echo
done
Вывод скрипта:
server_info_list content: ( pid=17236032 port=13 proc=inetd ) ( pid=17236032 port=21 proc=inetd ) ( pid=19923094 port=22 proc=sshd ) ( pid=19923094 port=22 proc=sshd ) ( pid=17236032 port=23 proc=inetd )
Index: 0
Process:
PID:
Port:
Index: 1
Process:
PID:
Port:
Index: 2
Process:
PID:
Port:
Index: 3
Process:
PID:
Port:
Index: 4
Process:
PID:
Port:
Я пытаюсь следовать примеру { ссылка } из вопроса: Элегантное использование массивов в k sh ...
Я скопировал и изменил пример с использования ассоциативного массива на индексированный массив и успешно заставил мой скрипт напечатать информацию, которую я хочу, если я вручную назначил массив server_info_list:
server_info_list=(
( pid=17236032 port=13 proc=inetd )
( pid=17236032 port=21 proc=inetd )
( pid=19923094 port=22 proc=sshd )
( pid=19923094 port=22 proc=sshd )
( pid=17236032 port=23 proc=inetd )
)
Но независимо от того, что я пытался, я не могу напечатать содержимое массива, если его данные назначаются автоматически массив.
Оболочка Korn: «Версия M 93t + 2009-05-01» в AIX 7.1.5.4 ...
Чего мне не хватает?