如何在ssh上获得彩色终端?

当我通过ssh连接到远程主机时,一切都只是一种字体/颜色。 我希望有像我在本地做的颜色,例如绿色用于可执行文件,蓝色用于符号链接等。这样当我在ssh主机上运行$ git diff时,它显示我带有颜色的差异=)

嗯。 因为它是服务器上的xterm,我认为.bashrc

的确! --color=auto仅在连接到TTY时有效。 改变一切简单 – 在.bashrc --color ,现在一切都是漂亮的颜色。

似乎颜色已经在~/.bashrc为我设置了,问题是ssh不使用bashrc文件。 您可以通过在~/.bash_profile添加以下内容在ssh会话中使用bashrc:

 if [ -f ~/.bashrc ]; then . ~/.bashrc fi 

这对我有用:

 ssh -t my_host my_command 

-t是关键。 解释 。

连接到服务器上时,XTERM env变量的内容是什么?

 ~ > export | grep -i term TERM=xterm 

我尝试更改~./bashrc设置(在本地和远程服务器上),但它似乎不起作用。

然后我注意到,如果我通过ssh连接它,远程服务器的~/.bashrc甚至都不会被执行。 所以我做了远程服务器的~/.bashrc来执行puttinng if [ -f ~/.bashrc ]; then . ~/.bashrc fi if [ -f ~/.bashrc ]; then . ~/.bashrc fi if [ -f ~/.bashrc ]; then . ~/.bashrc fi在远程服务器的~/.bash_profile (基于https://stackoverflow.com/questions/820517/bashrc-at-ssh-login )。

所以这个解决方案不需要直接更改任何~/bashrc文件,但它确实需要更改远程服务器的~/bash_profile文件,以便远程服务器的~/bashrc文件被执行。

在我的情况下,我最近安装了chef-local ,它让我向.bash_profile添加一行。 当我登录时, .bashrc永远不会加载,因为它看到了.bash_profile

我所做的是在.bash_profile添加一行:

 source .bashrc export PATH="/opt/chefdk/embedded/bin:$PATH" 

我退出并重新进入并立即获得了彩色终端。

在我的情况下,缺少的部分是有颜色的ls,grep等,可以通过在.bashrc文件中添加别名来添加:

 alias ls='ls --color=auto' alias grep='grep --color=auto' 

等等

上面的“Mike E”中有一条评论包含了我的答案,但它不仅难以阅读,如果你不经常使用.bashrc ,很难弄明白他的意思 – 我别。

拧了一下之后,我通过更改我用ssh登录的机器上的~/.bashrc的以下行来获得所需的结果:

 # set a fancy prompt (non-color, unless we know we "want" color) case "$TERM" in xterm-color|*-256color) color_prompt=yes;; esac 

至:

 # set a fancy prompt (non-color, unless we know we "want" color) case "$TERM" in xterm-color|*-256color) color_prompt=yes;; xterm) color_prompt=yes;; esac 

我想我可以在第一行的“颜色”之后添加“| xterm”,或者挖出来并弄清楚为什么ssh使用“xterm”而不是“xterm-color”并改变它,但是这有效,我还有其他事情要做。

我通过代理连接时失去了颜色,因为TERM=dumb所以我修复了它:

 ssh myproxy "ssh pi@localhost -p 5000 -tt 'TERM=xterm bash'"