В скрипте Bash есть странное поведение. Попытка запустить следующие строки в двух разных системах.
Сценарий:
cpuIdle=$(mpstat 5 1 | grep Average | awk '{ print $12 }')
cpuUsage=$(bc <<< "100.0-$cpuIdle")
А вот детали машин.
Система-1:
Linux 4.2.0-36-generic #42~14.04.1-Ubuntu SMP Fri May 13 17:27:22 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
awk --version
= GNU Awk 4.0.1
bash --version
= GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Система-2:
Linux 4.4.0-22-generic #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
awk --version
= GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
bash --version
= GNU bash, version 4.3.42(1)-release (x86_64-pc-linux-gnu)
Скрипт свободно работает в System-1, но выдает следующую ошибку на System-2 во время работы bc
:
(standard_in) 1: syntax error
Я могу подтвердить, что в обеих системах cpuIdle vairable настроен правильно ( 1-я строка из писания т).
Я также могу подтвердить, что bc работает без проблем в обеих системах, когда я вручную установил переменную cpuIdle (, как cpuIdle = 97.3 ).
Не могу решить, это ошибка или моя ошибка. Любое предложение или идеи?
Это - запятая.
$ cpuIdle=$(mpstat 5 1 | grep Average | awk '{ print $12 }')
$ echo $cpuIdle
99,25
->
$ cpuUsage=$(bc <<< "100.0-95,25")
(standard_in) 1: syntax error
и
$ cpuUsage=$(bc <<< "100.0-95.25")
$ echo $cpuUsage
4.75
<час> , Таким образом, это могло быть проблемой интернационализации (в Голландии, мы используем запятую для десятичных чисел). Я сказал бы: ошибка, кто-то забыл включать запятую как возможный десятичный знак.
Переключатель к американской аннотации и это будет работать снова.