Ubuntu (по состоянию на 18.04) поставляется с тремя отдельными оболочками в стиле Борна.
Существует множество функций bash
, используемых в качестве оболочки входа пользователя по умолчанию:
$ bash -c 'var=19; RANDOM=$var; v1=$RANDOM; v2=$RANDOM; echo $var $v1 $v2'
19 24421 24549
У вас естьВстроенный в BusyBox ash
, используемый для ранней загрузки:
$ busybox ash -c 'var=19; RANDOM=$var; v1=$RANDOM; v2=$RANDOM; echo $var $v1 $v2'
19 31262 30375
И быстрый и экономичный dash
, используемый в качестве системной оболочки по умолчанию:
$ dash -c 'var=19; RANDOM=$var; v1=$RANDOM; v2=$RANDOM; echo $var $v1 $v2'
19 19 19
Поскольку RANDOM
являетсяне стандартная функция оболочки, она ведет себя по-разному между ними.Bash и Ash дают две разные случайные последовательности, в то время как Dash рассматривает ее как обычную переменную.
Когда вы открываете терминал, оболочка имеет значение bash
.Когда вы вызываете system()
, он вызывает /bin/sh
, который в Ubuntu равен dash
.Вот почему все по-другому.