Mat*_*vid 10
远程提示由远程设置~/.bashrc。所以你仍然需要将它复制到远程服务器。但是,您可以~/.bashrc对所有主机使用单个,并根据主机名设置提示颜色:
[ "$PS1" ] || return 0 # continue only when interactive
case $(hostname -s) in
laptop*)
prompt_color='\033[48;5;16m\033[38;5;46m' # green(46) on black(16)
;;
server*)
prompt_color='\033[48;5;16m\033[38;5;196m' # red(196) on black(16)
;;
esac
ORIG_PS1=$PS1 # in case needed
PS1='<\['${prompt_color}'\]\h\[\033[m\]:\w>\$ '
unset prompt_color
Run Code Online (Sandbox Code Playgroud)
笔记:
PS1如果尚未设置(即,如果 shell 不是交互式的),则不要设置。测试是否PS1为非空是确定 shell 是否是交互式的一种非常常见的方法,并且您不想混淆执行此操作的程序。(可以说更准确的测试是检查是否$-包含i。)
如果您希望在登录远程服务器时运行此代码,您应该让配置文件之一始终为 source ~/.bashrc. 但我假设你知道这一点。
在 中PS1,转义码必须包含在 中\[...\]。
\[033[m将前景和背景重置为默认值。所以在这里,:\w出现在终端前景/背景中。
\[033[48;5;XXXm\033[38;5;YYYm将背景/前景设置为XXX/ YYY。
对于转储可用颜色的脚本,请尝试colortest.
要检查提示的样子:
echo -e "<\033[48;5;16m\033[38;5;196mhost\033[m:dir>$ "
Run Code Online (Sandbox Code Playgroud)如果你不想(不能)让遥控器有一个单独的PS1,那么我会说“不”,这至少会非常困难。考虑到在 SSH 连接上,本地端不知道什么是 shell 提示以及什么是其他东西,因此提示的设置颜色确实必须来自远程。您可以在开始会话之前设置颜色,但它们对所有输出都有效,直到一个ls或一个编辑器设置它自己的颜色。
当然,您可以为会话想出一些包装器来检测所有看起来像提示的内容并对其进行着色,但它很容易导致误报(每一行的颜色都带有$?),并且与仅删除一个单行到您的.profile或.bashrc每台机器上。
对于许多机器,在任何情况下搜索解决方案以同步所有机器上的配置更改可能很有用。无论是为它制作的一些工具,还是只是一个脚本,或者只是运行一个循环来复制一个(一组)配置文件。
我正在使用带有 sshpass 的包装脚本,该脚本将首先上传临时配置文件,然后使用此配置文件 ssh(并删除临时文件)。
脚本的两个主要内容是:
scp ~/.bash_remote "${USER}"@"${IP}":/tmp/.bash_tmp 1>/dev/null
ssh -t "${USER}"@"${IP}" "bash --rcfile /tmp/.bash_tmp; rm /tmp/.bash_tmp"
使用它,您可以轻松定义远程会话的颜色。
我知道这不能直接回答你的问题,但可以用来解决它。