วิธีการรับ terminal สีผ่าน ssh?


53

เมื่อฉันเชื่อมต่อผ่าน ssh กับโฮสต์ระยะไกลทุกอย่างเป็นเพียงแบบอักษร / สี ฉันต้องการให้มีสีเหมือนที่ฉันทำในท้องถิ่นเช่นสีเขียวสำหรับปฏิบัติการและสีฟ้าสำหรับ symlink เป็นต้นและเมื่อฉันเรียกใช้ $ git diff บนโฮสต์ ssh มันแสดงให้เห็นว่าฉันมีความแตกต่างกับสี =)


นั่นคือเซิร์ฟเวอร์อูบุนตูที่คุณกำลังเชื่อมต่อหรือ
Stefano Palazzo

@ stefano-palazzo: ถึง Debian
Dima

คำตอบ:


35

เพราะมันเป็น xterm บนเซิร์ฟเวอร์ฉันจึงคิดว่ามีบางอย่างผิดปกติ .bashrc

และแน่นอน! ls --color=autoใช้งานได้เฉพาะเมื่อคุณเชื่อมต่อกับ TTY เปลี่ยนทุกอย่างเป็นเพียงแค่--colorใน.bashrcโฮสต์ระยะไกลและทุกอย่างเป็นสีสวยตอนนี้


42
มันจะช่วยให้คำตอบนี้มากถ้าคุณกล่าวว่าที่คุณใส่ --color = อัตโนมัติ .bashrc บนเซิร์ฟเวอร์? คำสั่งอะไร
rfay

8
เนื่องจากนี่เป็นคำถามเก่าที่ยังคงมีความเกี่ยวข้องฉันแค่ต้องการที่จะเพิ่มว่าในระบบ Ubuntu ค่าเริ่มต้น. bashrc มีคำสั่งกรณีที่กำหนดสีเงื่อนไขที่ได้รับอนุญาต หากคุณพบบรรทัด "case" $ TERM $ "in" ใน. bashrc ของคุณให้เพิ่ม "xterm) color_prompt = ใช่ ;;" จะเปิดใช้งานสีด้วย นอกจากนี้คุณสามารถยกเลิกการใส่เครื่องหมายบรรทัด "force_color_prompt = yes" เพื่อเปิดใช้งานได้ทั่วโลกเสมอ
Mike E

2
มันเป็นความคิดเห็นของ Mike E ที่แก้ไขให้ฉัน
Frank Schrijver

3
ฉันสับสน การ "เปลี่ยนทุกสิ่งเป็นเพียงสี" หมายความว่าอย่างไร? ฉันสามารถดูตัวอย่างได้หรือไม่
still_dreaming_1

1
พวกคุณกำลังพูดเกี่ยวกับโฮสต์ในพื้นที่โฮสต์ระยะไกลหรือทั้งสองอย่าง?
อดัม

19

สิ่งนี้ใช้ได้กับฉัน:

ssh -t my_host my_command

-tเป็นกุญแจสำคัญ อธิบาย


มันทำงานได้อย่างสมบูรณ์และสะดวกมากสำหรับการทำงานครั้งเดียว ขอบคุณ!
XtraSimplicity

ฉันทำ colorize หายเมื่อฉันsu -สั่งในการเชื่อมต่อ ssh
dubis

10

ดูเหมือนว่าสีได้ถูกกำหนดไว้แล้ว~/.bashrcสำหรับฉันและปัญหาคือ ssh ไม่ได้ใช้ไฟล์ bashrc คุณสามารถใช้ bashrc ในเซสชั่น ssh ของคุณโดยการเพิ่มต่อไปนี้เพื่อ~/.bash_profile:

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

1
สิ่งนี้ได้ผลกับฉันและเป็นวิธีที่ง่ายและมีประสิทธิภาพในการทำให้เสร็จ!
flith

7

เนื้อหาของตัวแปร XTERM env ของคุณบนเซิร์ฟเวอร์คืออะไรเมื่อคุณเชื่อมต่อกับมัน

~ > export | grep -i term
TERM=xterm

$ ส่งออก | grep -i term ประกาศ -x TERM = "xterm"
Dima

4

ในกรณีของฉันส่วนที่ขาดหายไปคือมีสี ls, grep และอื่น ๆ ซึ่งสามารถเพิ่มได้โดยการเพิ่มชื่อแทนในไฟล์. bashrc:

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

เป็นต้น


2

ฉันลองเปลี่ยนการ~./bashrcตั้งค่า (ทั้งบนเซิร์ฟเวอร์ภายในและระยะไกล) แต่ดูเหมือนจะไม่ทำงาน

จากนั้นฉันสังเกตเห็นว่า~/.bashrcเซิร์ฟเวอร์ระยะไกลไม่ได้รับการดำเนินการหากฉันเชื่อมต่อผ่านทาง ssh ดังนั้นผมจึงทำ~/.bashrcของเซิร์ฟเวอร์ระยะไกลในการดำเนินการโดยputtinng ในเซิร์ฟเวอร์ระยะไกลif [ -f ~/.bashrc ]; then . ~/.bashrc fi ~/.bash_profile(ขึ้นอยู่กับhttps://stackoverflow.com/questions/820517/bashrc-at-ssh-login )

ดังนั้นโซลูชันนี้ไม่ต้องการเปลี่ยนแปลง~/bashrcไฟล์ใด ๆโดยตรง แต่ต้องการเปลี่ยน~/bash_profileไฟล์ของเซิร์ฟเวอร์ระยะไกลเพื่อให้~/bashrcไฟล์ของเซิร์ฟเวอร์ระยะไกลถูกดำเนินการ


อูบุนตูใช้.profileและไม่ได้.bash_profileโดยเริ่มต้นและเริ่มต้นไม่แหล่งที่มา.profile .bashrc
muru

ถูกต้อง. แต่จะ.profileได้รับการดำเนินการตามค่าเริ่มต้นเมื่อเข้าสู่ระบบผ่าน ssh?
chris544

ใช่. หากคุณไม่ได้แทนที่โดยใช้.bash_profilebash จะทำงาน.profileเมื่อเริ่มต้นเป็นเชลล์การเข้าสู่ระบบ และ SSH เริ่มทุบตีเป็นเชลล์ล็อกอิน
muru

มันถูกต้องที่~/.profileไม่ได้อ่านถ้า~/.bash_profileมีอยู่ แต่~/.bash_profileค่าเริ่มต้นไม่มีอยู่บน Ubuntu หรือ
chris544

ดูความคิดเห็นแรกของฉันอีกครั้ง ไม่เลย .profileใช้อูบุนตู
muru

2

เนื่องจากสีทำงานได้ดีในขณะที่เข้าสู่ระบบโดยตรงฉันเพียงแค่ยกเลิกการแยกส่วนforce_color_prompt=yesของไฟล์ในไฟล์~/.bashrcซึ่งทำให้ฉันมีสีมากกว่า ssh ด้วย:

# 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)


เพิ่มขึ้นดูเหมือนว่านี่จะเป็นทางออกที่ตรงไปตรงมามากที่สุด
snwflk

1

ในสถานการณ์ของฉันฉันเพิ่งติดตั้งและขอให้ผมเพิ่มบรรทัดไปchef-local .bash_profileเมื่อฉันลงชื่อเข้าใช้ไม่เคยโหลดอีกต่อไปเพราะมันเห็น.bashrc.bash_profile

สิ่งที่ฉันทำคือการเพิ่มบรรทัดใน.bash_profile:

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

ฉันออกจากระบบและกลับเข้ามาและได้รับเครื่องปลายทางทันที


0

มีความคิดเห็นจาก "Mike E" ด้านบนที่มีคำตอบสำหรับฉัน แต่มันไม่ใช่แค่อ่านยากมันยากที่จะเข้าใจว่าเขาหมายถึงอะไรถ้าคุณไม่ได้ใช้.bashrcมาก - และฉันก็ไม่ได้ ' เสื้อ

หลังจากไขสกรูเล็กน้อยฉันได้ผลลัพธ์ที่ต้องการโดยเปลี่ยนบรรทัดต่อไปนี้~/.bashrcบนเครื่องที่ฉันล็อกอินด้วย ssh:

# 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" หลังจาก "color" ในบรรทัดแรกหรือขุดไปรอบ ๆ แล้วหาสาเหตุที่ ssh ใช้ "xterm" แทน "xterm-color" และเปลี่ยนสิ่งนั้น แต่สิ่งนี้ใช้ได้กับฉัน มีสิ่งอื่น ๆ ให้ทำตอนนี้


0

ฉันเสียสีเมื่อเชื่อมต่อผ่านพร็อกซีเพราะTERM=dumbฉันจึงแก้ไข:

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

1
คุณควรจัดสรรเทอร์มินัลในการเชื่อมต่อครั้งแรกเช่นกันหากคุณกำลังจะทำเช่นนั้น
muru
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.