2014-10-27 24 views
1

我希望變量NUSERS='who | wc -l'每2秒更新一次,以便在.bashrc文件中定義的PS1='\[email protected]\h-${NUSERS}:\w $'中顯示提示中連接用戶的數量。在bashrc中更新背景中的變量

我tryed:watch NUSERS='who | wc -l' &>/dev/null &.bashrc ......它沒有工作

我tryed:while true; do NUSERS='who | wc -l' && sleep 2; done &.bashrc ......它沒有工作也不

我不明白爲什麼這個不起作用。我想避免屏幕和nohup,因爲我不想在退出ssh會話時運行該命令。

+1

父shell不會看到它的孩子變量更新直接插入命令。 – 2014-10-27 10:26:13

+0

請注意'bash'不能更新命令之間的提示,所以如果您確實希望計數每2秒更新一次,則在提示符下顯示它不是要走的路(除非您每隔兩秒運行一次命令)。可以在終端窗口中運行'watch',或者使用'screen'或'tmux'這樣的程序來提供一個狀態欄,它可以*以固定的時間間隔更新。 – chepner 2014-10-27 13:12:21

回答

1

實際上,有可能在PS1變量聲明中.bashrc文件

PS1='\[email protected]\h-`who | wc -l`:\w $' 
3

父shell在子級中看不到更新。

因爲你的目的是有一個更新每兩秒鐘不,但每一個新的提示顯示時間,你可以使用PROMPT_COMMAND變量此。

按照參考手冊,關於PROMPT_COMMAND變量:

如果置位,該值被解釋爲命令的每個主提示符($PS1)的打印之前執行。

正是你需要的!

把這個在您的.bashrc文件:

PROMPT_COMMAND='NUSERS=$(wc -l < <(who))' 
PS1='\[email protected]\h-$NUSERS:\w $' 

,你會好的。

+0

雖然如果每個用戶在有很多用戶的系統上進行提示時,系統管理員可能會創建一個專用服務以使此號碼保持在最新的通用位置。 – tripleee 2014-10-27 11:16:19

+0

@tripleee當然,但這超出了OP的問題... – 2014-10-27 11:21:09