如何在 FreeBSD 中的提示中包含我的虚拟控制台 ID

如何在 FreeBSD 中的提示中包含我的虚拟控制台 ID

当我在 FreeBSD 中使用虚拟控制台时ALT-F<1~n>,我希望我的“zsh”、“sh”(可能还有其他 shell)启动脚本在提示中包含虚拟控制台编号(如果它不是默认控制台“1”)。

我怎么做?

答案1

PS1根据 的值有条件地设置$TTY。第一个虚拟控制台是/dev/ttyv0,第二个是/dev/ttyv1,等等。

对于 zsh,请在~/.zshrc.对于 bash,请在~/.bashrc.

if [[ $TTY == /dev/ttyv[1-9]* ]]; then
  PS1="[${TTY#/dev/ttyv}] $PS1"
fi

bash 和 zsh 中执行此操作的代码是相同的。如果您想在提示中获得更多效果(当前目录、主机名、颜色……),则格式为PS1取决于 shell:桀骜巴什两者都支持提示转义,但它们完全不同。

答案2

KVT 不是控制台,控制台可以是串行、视频或静音。 FreeBSD 上默认的内核虚拟终端实际上​​是 0,其设备文件名为/dev/ttyv0,而不是 1。这不是 Linux。因此,我建议您无条件地将其包含在提示中,至少直到您习惯实际编号为止。 ☺

在 Z shell 中这真的很容易。我有它在我的RPROMPT

RPROMPT=%y

所有提示的 shell 变量(当然)应该在适当的交互式 shell rc 文件中设置,例如.zshrc,并且不导出。

如果您只想要数字,而不是设备名称,那么它只是一个不同的百分比序列:

RPROMPT=%j

但是,%j如果您还在附加到 GUI 终端仿真器或用户空间虚拟终端的 shell 中使用它,则会导致混乱,因为 Z shell 为伪终端生成与 KVT 相同的编号。

FreeBSD Almquist shell 没有可以放入其PS1shell 变量中的提示序列(并且也没有右侧提示)。您需要一些也可以与 FreeBSD Almquist shell 一起使用的东西。吉尔斯的回答没有,也没有提示元字符序列。

那里没有 TTY在 KVT 登录会话中设置环境变量(除非您使用我的 nosh 工具集,该工具集添加FreeBSD 上的终端登录约定是通过其vc-get-tty程序实现的)。吉尔斯的回答仅有的之所以有效,是因为 Z shell 提供了隐式TTYshell 变量。它不适用于 FreeBSD Almquist shell 或您可能使用的其他 shell,例如 Korn shell,其中没有隐式 shell 变量,也没有任何环境变量。

对于这些,你必须首先采取以下措施:

导出 TTY="`tty`"

相关内容