1

В настоящее время я пытаюсь создать настраиваемое приглашение bash, но $RANDOM ведет себя не так, как я ожидал, и я надеюсь, что кто-то здесь может объяснить, почему он ведет себя так, как он.

В настоящее время у меня есть очень простой скрипт bash, назовем его test.sh

function __showPrompt() {
  echo "
  date: $(date)
  random 1: $RANDOM
  random 2: $RANDOM
  "
}

PS1="\$(__showPrompt)"

Теперь, когда я запускаю source test.sh моя подсказка становится выводом даты и двух случайных чисел, как я и ожидал.

date: Thu Aug  2 15:13:13 CEST 2018
random 1: 24379
random 2: 17139

Но после этого, когда я запускаю команду и подсказка перезапускается, я получаю и обновляю отметку времени, но значение $RANDOM остается прежним

date: Thu Aug  2 15:19:32 CEST 2018
random 1: 24379
random 2: 17139

Если я вручную запускаю __showPrompt значения обновляются

date: Thu Aug  2 15:20:23 CEST 2018
random 1: 30953
random 2: 6153

И что делает это еще более странным, так это то, что моя подсказка обновляется до тех же значений. То же самое верно, если я запускаю echo $RANDOM в терминале, что снова приводит к изменению случайных значений в моих подсказках (и затем застреванию).

date: Thu Aug  2 15:23:02 CEST 2018
random 1: 30953
random 2: 6153


date: Thu Aug  2 15:23:02 CEST 2018
random 1: 30953
random 2: 6153

echo $RANDOM
30953

date: Thu Aug  2 15:23:08 CEST 2018
random 1: 6153
random 2: 32728


date: Thu Aug  2 15:23:10 CEST 2018
random 1: 6153
random 2: 32728

Я не уверен в том, что происходит, но мне кажется, что $RANDOM засевается только в том случае, если он запущен в реальном терминале и никогда не находится внутри $PS1 .

Надеюсь, кто-нибудь с большим знанием Bash, чем я, может объяснить, что происходит

Примечание: я нахожусь на MacOS, но я не вижу, что это должно иметь большое значение здесь.

0