LINUX.ORG.RU

bash: непонятный результат после цикла while


0

1

Есть вот такой скриптик:

#!/bin/sh

INFO="info"
CPU="cpu"

top -b -d 1 -n 3 | while read line
do
    CPU=`expr match "$line" '\(^Cpu.*\)'`
  
    if [ -n "$CPU" ]; then
      echo "iteration start: '$INFO' "

      INFO=$CPU

      echo "iteration end: '$INFO' "
      echo

    fi;
                          
done
                          
echo "loop end: '$INFO' "

----------------
Запускаем:
./test.sh
iteration start: 'info'
iteration end: 'Cpu(s): 0.0%us, 47.0%sy, 10.7%ni, 42.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st'

iteration start: 'Cpu(s): 0.0%us, 47.0%sy, 10.7%ni, 42.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st'
iteration end: 'Cpu(s): 0.0%us, 81.7%sy, 18.3%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st'

iteration start: 'Cpu(s): 0.0%us, 81.7%sy, 18.3%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st'
iteration end: 'Cpu(s): 0.0%us, 81.7%sy, 18.3%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st'

loop end: 'info'
----------------

Вопросы:
- почему после завершения while переменная INFO не изменила своего значения?
- как получить новое значение переменной INFO после завершения while ?

потому что while выполняется в дочернем шэле

ananas ★★★★★
()

Попробуй сделать экспорт переменной INFO

roy ★★★★★
()
#!/bin/sh

INFO="info"
CPU="cpu"

while read line ; do
    CPU=`expr match "$line" '\(^Cpu.*\)'`
  
    if [ -n "$CPU" ]; then
      echo "iteration start: '$INFO' "

      INFO=$CPU

      echo "iteration end: '$INFO' "
      echo

    fi;
                          
done < <( top -b -d 1 -n 3 )
geekless ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.