命令提示符中更新的正常运行时间信息

命令提示符中更新的正常运行时间信息

我想将uptime命令信息放入命令提示符中,并每 750 毫秒更新一次(无论我是否在提示符处输入)。

我经常使用bash,但我也使用过zsh,这让我来到这里。我有一种感觉还bash不够,感谢任何帮助。


我很抱歉错过了这篇文章。

预期的提示将如下所示:

10:07:09 up 54 min,  7 users,  load average: 0.23, 0.38, 0.44
~/Videos ($)

我喜欢工作目录后面括号中的权限级别标识符的想法。然后定期更新正常运行时间信息,但不一定是 750 毫秒。

再次,非常抱歉没有提供更多信息来开始。

谢谢大家,提前

答案1

zsh

TRAPALRM() { psvar[1]=$(uptime); zle reset-prompt; }
RPS1='%1v'
TMOUT=1

uptime您将在正确的提示中每秒更新一次输出。对于 750 毫秒,您不能使用$TMOUT仅接受整数的情况。

你可以这样做:

zmodload zsh/zselect
RPS1='%1v'
TRAPALRM() {
  (zselect -t 75; kill -s ALRM $$ 2> /dev/null) &|
  psvar[1]=$(uptime)
  [[ -z $WIDGET ]] || zle reset-prompt
}
precmd_functions+=(TRAPALRM)

另一种方法可能是让一个循环每 750 毫秒发送一次正常运行时间作为 coproc,用于zle -F处理其输出coproc

zmodload zsh/system
zmodload zsh/zselect
UPTIME_TMOUT=
coproc {
  while true; do
    zselect -r 0 ${UPTIME_TMOUT:+-t} $UPTIME_TMOUT
    case $? in
      (0) IFS= read UPTIME_TMOUT || exit
          [[ -n $UPTIME_TMOUT ]] || continue;;
      (1) ;;
      (*) exit 1;;
    esac
    uptime
  done
}
sysopen -wu UPTIME_TO   -o cloexec /dev/fd/3 3>&p
sysopen -ru UPTIME_FROM -o cloexec /dev/fd/3 3<&p

handle_uptime_event() {
  if ! IFS= read -ru $UPTIME_FROM 'psvar[1]'; then
    zle -F $UPTIME_FROM
    exec {UPTIME_FROM}<&- {UPTIME_TO}>&-
    unset UPTIME_TO UPTIME_FROM
  fi
  zle reset-prompt
}

start_uptime_loop() {
  (($+UPTIME_TO)) && print -u $UPTIME_TO 75
}
stop_uptime_loop() {
  (($+UPTIME_TO)) && print -u $UPTIME_TO
}
zle -F $UPTIME_FROM handle_uptime_event
precmd_functions+=(start_uptime_loop)
preexec_functions+=(stop_uptime_loop)

RPS1=%1v

相关内容