Выберите случайное значение из массива перед каждым приглашением в bash

Я пытаюсь сделать пользовательский запрос, который выбирает одно случайное значение из следующих списков:

color=(1 2 3 4 5 6)
much=(such very much many so)
wow=(wow hacker terminal geek confusion)

затем делает это перед каждым приглашением.

tput setaf $rcolor
echo -n "$rmuch $rwow $ "

Проблема в том, если я использую PS1, он выполняется при запуске терминала и не обновляется перед каждым приглашением. Как получить различное, случайное сообщение перед каждым приглашением?

Образец вывода:

such hacker $
much wow $
very geek $
such wow $
much confusion $
very terminal $

2 ответа

Решение

Вы должны избежать $:

PS1="\$(tput setaf \${color[\$RANDOM%6]})\${much[\$RANDOM%5]} \${wow[\$RANDOM%5]}: "

PS1 оценивается каждый раз при печати.

Ты можешь использовать trap также:

much=(such very much many so)
wow=(wow hacker terminal geek confusion)
max=${#much[@]}
trap 'PS1="${much[$((RANDOM % max))]} ${wow[$((RANDOM % max))]} $ "' DEBUG

Выход:

much confusion $
such terminal $
such confusion $
such geek $
so terminal $
very confusion $
such geek $
such terminal $
much terminal $
many geek $
Другие вопросы по тегам