LINUX.ORG.RU
решено ФорумAdmin

bash прерывается цикл


0

1

Выводит только первое значение.

# ./vzcpu
51.3
#/bin/bash
 

ploop list | while read line
do
        # split string to variables
        IFS=" " set -- $line
        ID_VPS=$(echo "$2" | egrep -o "[0-9]+" | sed 's/\///g')
		vzctl $ID_VPS 120 ps aux | awk '{ sum += $3 } END { print sum }'
		#echo $ID_VPS
done

Ответ на: комментарий от ziemin

#/bin/bash -x => так же выдает

#/bin/bash -x
 

ploop list | while read line
do
        # split string to variables
        IFS=" " set -- $line
        ID_VPS=$(echo "$2" | egrep -o "[0-9]+" | sed 's/\///g')
		#vzctl exec2 $ID_VPS ps aux | awk '{ sum += $3 } END { print sum }'
		echo $ID_VPS
done

 ./vzcpu
10000
104
105
108
109
110
118
119
2000
2002
120
2004
121
10001

а с vzctl exec2 - выводит только первое

poiuty ()
Ответ на: комментарий от ziemin
# bash -x vzcpu
+ ploop list
+ read line
+ IFS=' '
+ set -- ploop50057 /vz-my/private/10000/root.hdd/root.hdd
++ echo /vz-my/private/10000/root.hdd/root.hdd
++ egrep -o '[0-9]+'
++ sed 's/\///g'
+ ID_VPS=10000
+ vzctl exec2 10000 ps aux
+ awk '{ sum += $3 } END { print sum }'
0
+ read line

почему он на exec2 останавливает?

poiuty ()
Ответ на: комментарий от ziemin
# ploop list
ploop50057   /vz-my/private/10000/root.hdd/root.hdd
ploop45851   /vz-ssd/private/104/root.hdd/root.hdd
ploop10950   /vz-ssd/private/105/root.hdd/root.hdd
ploop24727   /vz-ssd/private/108/root.hdd/root.hdd
ploop24654   /vz-ssd/private/109/root.hdd/root.hdd
ploop28902   /vz-ssd/private/110/root.hdd/root.hdd
ploop56618   /vz-ssd/private/118/root.hdd/root.hdd
ploop29292   /vz-ssd/private/119/root.hdd/root.hdd
ploop38762   /vz-ssd/private/2000/root.hdd/root.hdd
ploop35319   /vz-my/private/2002/root.hdd/root.hdd
ploop45036   /vz-ssd/private/120/root.hdd/root.hdd
ploop41305   /vz-ssd/private/2004/root.hdd/root.hdd
ploop55053   /vz-ssd/private/121/root.hdd/root.hdd
ploop26821   /vz-my/private/10001/root.hdd/root.hdd

так получилось

# for i in `vzlist -o veid -H`;do vzctl exec $i ps aux | awk '{ sum += $3 } END { print sum }';done
0
22.8
1
1.2
1.9
1.6
0
46.1
1.5
0
0
0
0
0

Все же интересно, почему через while не пошло?

poiuty ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.