Bagaimana cara mendapatkan terminal berwarna di atas ssh?

53

Ketika saya menghubungkan ssh ke host jarak jauh semuanya hanya satu font / warna. Saya ingin memiliki warna seperti yang saya lakukan secara lokal misalnya hijau untuk dieksekusi dan biru untuk symlink dll. Dan sehingga ketika saya menjalankan $ git diff pada ssh host itu menunjukkan saya berbeda dengan warna =)

Dima
sumber
Apakah itu server Ubuntu yang Anda hubungkan?
Stefano Palazzo
@ stefano-palazzo: ke Debian.
Dima

Jawaban:

35

Karena itu xterm di server, saya pikir ada yang tidak beres .bashrc

Dan memang! ls --color=autohanya berfungsi ketika Anda terhubung ke TTY. Mengubah segalanya untuk hanya --colordi .bashrcpada remote host dan semuanya dalam warna cantik sekarang.

Dima
sumber
42
Ini akan banyak membantu jawaban ini jika Anda mengatakan di mana Anda meletakkan --color = auto. .bashrc di server? Perintah apa?
rfay
8
Karena ini adalah pertanyaan lama yang masih relevan, saya hanya ingin menambahkannya di sistem Ubuntu, default .bashrc memiliki pernyataan kasus yang mendefinisikan istilah mana yang diperbolehkan warna. Jika Anda menemukan baris "case" $ TERM $ "in" di .bashrc Anda, menambahkan "xterm) color_prompt = yes ;; juga akan mengaktifkan warna. Anda juga dapat menghapus komentar pada baris "force_color_prompt = yes" untuk selalu mengaktifkannya secara global.
Mike E
2
Komentar Mike E yang memperbaikinya untuk saya,
Frank Schrijver
3
Saya bingung. Apa artinya "mengubah segalanya hanya --color"? Bisakah saya melihat contohnya?
still_dreaming_1
1
Apakah kalian berbicara tentang host lokal, host jarak jauh atau keduanya?
Adam
19

Ini bekerja untuk saya:

ssh -t my_host my_command

-tadalah kuncinya. Dijelaskan .

juanpastas
sumber
Ini berfungsi dengan baik, dan sangat nyaman untuk tugas yang tidak dikerjakan. Terima kasih!
XtraSimplicity
Saya kehilangan warna ketika saya melakukan su -perintah di prompt koneksi ssh
dubis
10

Sepertinya warna sudah diatur ~/.bashrcuntuk saya dan masalahnya adalah ssh tidak menggunakan file bashrc. Anda dapat menggunakan bashrc di sesi ssh Anda dengan menambahkan yang berikut ke ~/.bash_profile:

if [ -f ~/.bashrc ]; then
      . ~/.bashrc
fi
dariusz gorczynski
sumber
1
Ini bekerja untuk saya, dan merupakan cara yang sederhana dan efisien untuk menyelesaikannya!
flith
7

Apa isi variabel env XTERM Anda di server saat Anda terhubung?

~ > export | grep -i term
TERM=xterm
Vedran Krivokuća
sumber
$ ekspor | grep -saya menyatakan -x TERM = "xterm"
Dima
4

Dalam kasus saya, bagian yang hilang adalah memiliki warna ls, grep, dll. Yang dapat ditambahkan dengan menambahkan alias ke file .bashrc:

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

dll.

Stuart Clark
sumber
2

Saya mencoba mengubah ~./bashrcpengaturan (baik pada server lokal dan jarak jauh), tetapi sepertinya tidak berhasil.

Kemudian saya perhatikan bahwa ~/.bashrcserver jarak jauh bahkan tidak dapat dieksekusi jika saya terhubung melalui ssh. Jadi saya membuat ~/.bashrcserver jauh untuk mengeksekusi dengan memasukkan if [ -f ~/.bashrc ]; then . ~/.bashrc fike server jauh ~/.bash_profile. (berdasarkan https://stackoverflow.com/questions/820517/bashrc-at-ssh-login ).

Jadi solusi ini tidak perlu mengubah ~/bashrcfile apa pun secara langsung tetapi memang membutuhkan perubahan ~/bash_profilefile server jarak jauh sehingga ~/bashrcfile server jarak jauh dijalankan.

chris544
sumber
Ubuntu menggunakan .profiledan bukan .bash_profilesecara default, dan default .profilememang sumber .bashrc.
muru
Itu betul. Tetapi apakah .profiledieksekusi secara default saat masuk melalui ssh?
chris544
Iya. Asalkan Anda tidak menimpanya menggunakan .bash_profile, bash berjalan .profileketika dimulai sebagai shell login. Dan SSH mulai bash sebagai shell login.
muru
Benar bahwa ~/.profiletidak dibaca jika ~/.bash_profileada. Tetapi apakah tidak ~/.bash_profileada di Ubuntu secara default?
chris544
Lihat komentar pertamaku lagi. Tidak, tidak. Ubuntu menggunakan .profile.
muru
2

Karena warna berfungsi dengan baik ketika sedang login secara langsung, saya hanya menghapus-uncommented baris force_color_prompt=yesdalam file ~/.bashrc, yang memberi saya warna lebih dari ssh, juga:

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

(Ubuntu 18,04 LTS)

hinneLinks
sumber
Terpilih, ini tampaknya menjadi solusi yang paling mudah.
snwflk
1

Dalam situasi saya, saya baru saja menginstal chef-localdan meminta saya untuk menambahkan baris .bash_profile. Ketika saya masuk, .bashrctidak pernah memuat lagi, karena melihat .bash_profile.

Apa yang saya lakukan adalah menambahkan baris .bash_profile:

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

Saya logout dan kembali dan mendapatkan terminal berwarna saya segera.

Kevin
sumber
0

Ada komentar dari "Mike E" di atas yang berisi jawaban untuk saya, tetapi tidak hanya sulit dibaca, juga agak sulit untuk mencari tahu apa maksudnya jika Anda tidak menggunakan .bashrcbanyak - dan saya tidak tahu. t.

Setelah bermain-main sedikit, saya mendapatkan hasil yang diinginkan dengan mengubah baris-baris berikut ~/.bashrcpada mesin yang saya masuki dengan ssh:

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

untuk:

# 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

Saya berpikir saya bisa saja menambahkan "| xterm" setelah "warna" di baris pertama, atau menggali dan mencari tahu mengapa ssh menggunakan "xterm" bukannya "xterm-color" dan mengubahnya, tetapi ini berhasil dan saya punya hal lain yang harus dilakukan sekarang.

Mike Wise
sumber
0

Saya kehilangan warna saat terhubung melalui proxy karena TERM=dumbsaya memperbaikinya:

ssh myproxy "ssh pi@localhost -p 5000 -tt 'TERM=xterm bash'"
ErichBSchulz
sumber
1
Anda harus mengalokasikan terminal pada koneksi pertama juga, jika Anda akan melakukannya.
muru