Один несколько hackish решение был бы для родительского процесса для присоединения к каждому ребенку как отладчик (использование DebugActiveProcess). Когда отладчик завершается, все его процессы отлаживаемой программы завершаются также.
А лучшее решение (принимающий Вас записал дочерние процессы также) будет состоять в том, чтобы иметь монитор дочерних процессов родитель и выход, если это уходит.
вам действительно нужен массив
bash
$ ipAddress="10.78.90.137;10.78.90.149"
$ IFS=";"
$ set -- $ipAddress
$ echo $1
10.78.90.137
$ echo $2
10.78.90.149
$ unset IFS
$ echo $@ #this is "array"
, если вы хотите поместить в массив
$ a=( $@ )
$ echo ${a[0]}
10.78.90.137
$ echo ${a[1]}
10.78.90.149
@OP, относительно вашего метода: установите IFS в пробел
$ IFS=" "
$ n=( $(grep -i ipaddress file | cut -d'=' -f2 | tr ';' ' ' | sed 's/"//g' ) )
$ echo ${n[1]}
10.78.90.149
$ echo ${n[0]}
10.78.90.137
$ unset IFS
Также , нет необходимости использовать так много инструментов. вы можете просто использовать awk или просто команду bash shell
#!/bin/bash
declare -a arr
while IFS="=" read -r caption addresses
do
case "$caption" in
ipAddress*)
addresses=${addresses//[\"]/}
arr=( ${arr[@]} ${addresses//;/ } )
esac
done < "file"
echo ${arr[@]}
output
$ more file
foo
bar
ipAddress="10.78.91.138;10.78.90.150;10.77.1.101"
foo1
ipAddress="10.78.90.137;10.78.90.149"
bar1
$./shell.sh
10.78.91.138 10.78.90.150 10.77.1.101 10.78.90.137 10.78.90.149
gawk
$ n=( $(gawk -F"=" '/ipAddress/{gsub(/\"/,"",$2);gsub(/;/," ",$2) ;printf $2" "}' file) )
$ echo ${n[@]}
10.78.91.138 10.78.90.150 10.77.1.101 10.78.90.137 10.78.90.149
Вариант темы:
$ line=$(grep -i ipaddress /opt/ipfile)
$ saveIFS="$IFS" # always save it and put it back to be safe
$ IFS="=;"
$ n=($line)
$ IFS="$saveIFS"
$ echo ${n[0]}
ipAddress
$ echo ${n[1]}
10.78.90.137
$ echo ${n[2]}
10.78.90.149
Если в файле нет другого содержимого, вам может не понадобиться grep
, и вы сможете читать весь файл.
$ saveIFS="$IFS"
$ IFS="=;"
$ n=$(</opt/ipfile)
$ IFS="$saveIFS"
] Решение Perl:
n=($(perl -ne 's/ipAddress=(.*);/$1 / && print' filename))
, которое проверяет и удаляет нежелательные символы за одну операцию.
Этот работает:
n=(`grep -i ipaddress filename | cut -d"=" -f2 | tr ';' ' '`)
РЕДАКТИРОВАТЬ: (улучшенная, вложенная версия согласно Деннису)
n=($(grep -i ipaddress filename | cut -d"=" -f2 | tr ';' ' '))