Обновить переменную в фоновом режиме в 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 $'
и у тебя все будет хорошо.