在bashrc中更新后台变量

时间:2014-10-27 10:23:03

标签: bash command-prompt background-process

我希望变量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 个答案:

答案 0 :(得分:3)

父shell在其子节点中看不到变量更新。

由于您的目的是更新不是每两秒,而是每次显示新提示,您可以使用PROMPT_COMMAND变量此

根据参考手册,关于PROMPT_COMMAND变量:

  

如果设置,则该值将被解释为在打印每个主要提示($PS1)之前执行的命令。

正是你需要的!

将其放入.bashrc文件中:

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

你会很好。

答案 1 :(得分:1)

实际上,可以直接在PS1文件的.bashrc变量声明中插入命令

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