Обновить переменную в фоновом режиме в bashrc

Я хотел бы переменную NUSERS='who | wc -l' обновляться каждые 2 секунды для отображения количества подключенных пользователей в приглашении с PS1='\u@\h-${NUSERS}:\w $' определены в .bashrc файл.

Я пытался: watch NUSERS='who | wc -l' &>/dev/null & в .bashrc... это не сработало

Я пытался: while true; do NUSERS='who | wc -l' && sleep 2; done & в .bashrc... это не сработало ни

Я не понимаю, почему это не работает. Я хотел бы избежать экрана и nohup, потому что я не хочу, чтобы команда выполнялась при выходе из сеанса ssh.

2 ответа

Решение

На самом деле, можно вставить команду прямо в PS1 объявление переменной в .bashrc файл

PS1='\u@\h-`who | wc -l`:\w $'

Родительская оболочка не видит обновления переменных в своих дочерних элементах.

Поскольку ваша цель - обновлять не каждые две секунды, а каждый раз, когда отображается новое приглашение, вы можете использовать PROMPT_COMMAND переменная для этого.

Согласно справочнику, о PROMPT_COMMAND переменная:

Если установлено, значение интерпретируется как команда, выполняемая перед печатью каждого основного приглашения ($PS1).

Именно то, что вам нужно!

Поместите это в свой .bashrc файл:

PROMPT_COMMAND='NUSERS=$(wc -l < <(who))'
PS1='\u@\h-$NUSERS:\w $'

и у тебя все будет хорошо.

Другие вопросы по тегам