В настоящее время я пытаюсь создать настраиваемое приглашение 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, но я не вижу, что это должно иметь большое значение здесь.