man*_*m-n 10 bash virtual-terminal
我使用Ubuntu的,并且可以在手动更改bashshell提示符颜色绿使用
export PS1="\e[0;32m[\u@\h \W]\$ \e[m"
Run Code Online (Sandbox Code Playgroud)
但是,我希望每次打开新终端或选项卡时,shell 提示颜色都会自动更改。我知道基本的 tty TERM 有 16 种颜色,如果打开的终端超过 16 个,可以旋转颜色。当我通过Putty,tmux或screen.
我的想法是编写一个 shell 脚本并将其放置在.bashrc检测用户已打开的新终端会话中,并将全局计数器从\e[0;31m[to递增\e[0;47m[。如何检测用户打开的终端数量?
如果您确实需要获得已打开的终端数量,请计算您拥有的文件数量/dev/pts(尽管这可能包括由后台进程打开的文件,而不是图形终端模拟器打开的文件)。或者,计算终端仿真器的子进程数,如 Jacob 在其响应的第一行中所示。
避免依赖who的输出和寻找gnome-pty-helper进程,因为这些在较新的gnome-terminal版本中不起作用。
请注意,现在几乎所有图形终端仿真器(包括 putty)和多路复用器(screen、tmux)都支持 256 色。如果您使用此调色板,您可以获得非常漂亮的彩色提示。
我对一个非常简单的解决方案的建议是将颜色基于当前 tty 行的编号。例如,处理tty命令的输出以仅获取数字并从中导出颜色。某个 tty 行号一次只提供给一个终端,在内核重新发出相同的行号之前,您必须先关闭该终端。这与 256 种颜色相结合,自动保证您不会在给定时间看到两次相同的颜色(即使使用 16 种颜色,它也会提供相当均匀的分布)。无需维护全局计数器,无需对终端或进程进行计数。
在单个用户的情况下,如果我们以 为例xterm,我们可以简单地统计 pid 的数量xterm;xterm为每个窗口创建一个单独的 pid。
gnome-terminal但是运行单个 pid,但好消息是它为每个窗口和/或选项卡创建了一个子进程。我们可以通过以下命令检索这些子进程:
pgrep -P <pid_of_gnome-terminal>
Run Code Online (Sandbox Code Playgroud)
然而,有一些并发症需要处理:
阅读您的问题,我们可能会假设,在这种情况下,用户实际上是 x-session 的所有者。通常我们可以简单地使用 -$USER变量,但这可能与当前登录的用户不匹配$DISPLAY。
在多用户情况下,属于(任一)终端应用程序的 pid 不一定属于当前$DISPLAY. 我们只需要分离出相关的 pid 和 child-pid。
在 Unity(15.10 或更低版本)上,如果第二个用户登录,则会启动一个附加进程 ( gnome-pty-helper),该进程在 中显示为子进程gnome-terminal,但该进程(显然)没有窗口或选项卡。在Mate 上,该过程无论如何都存在。
要计算终端应用程序的选项卡和/或窗口的数量,我们需要:
$DISPLAY(x-session)上的单个 pid$DISPLAYgnome-pty-helper运行,以更正数字。然而,这可以很好地编写脚本,以可靠地找到当前打开的窗口和/或选项卡的数量。
在下面的脚本中,目标终端应用程序用作参数。该脚本适用于我测试过的许多终端。一个例外是Tilda在这一刻。
一个例子
gnome-terminal窗口,一个(图像中的一个)有三个gnome-terminal窗口,还有两个xterm窗口。命令:
/path/to/get_terms.sh gnome-terminal
Run Code Online (Sandbox Code Playgroud)
输出:
3
Run Code Online (Sandbox Code Playgroud)
尽管
/path/to/get_terms.sh xterm
Run Code Online (Sandbox Code Playgroud)
输出:
2
Run Code Online (Sandbox Code Playgroud)
pgrep -P <pid_of_gnome-terminal>
Run Code Online (Sandbox Code Playgroud)
将脚本复制到一个空文件中,另存为get_terms.sh,使其可执行并通过以下命令运行它:
/path/to/get_terms.sh <terminal_application>
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
6334 次 |
| 最近记录: |