tmux ไม่กำหนดค่า color PS1 ให้พร้อม


11

เมื่อเร็ว ๆ นี้ฉันตัดสินใจที่จะเปลี่ยนตัวแปร PS1 ของฉันเพื่อรองรับสี Solarized ที่สวยงามเพื่อความเพลิดเพลินในการรับชมเครื่อง เมื่อไม่ได้อยู่ในเซสชั่น tmux ทุกอย่างยอดเยี่ยม! สายรุ้งม้ายูนิคอร์นและพรอมต์ที่แตกต่าง! เย็น!

อย่างไรก็ตามปัญหาอยู่ภายใน tmux อย่างไรก็ตาม ฉันได้รับการตรวจสอบว่าค่าของ PS1 เป็นสิ่งที่ผมคาดหวังว่ามันจะเป็นและเช่นเดียวกับมันคือเมื่อ tmux \[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\]ไม่ได้ทำงานคือ

นามแฝงทั้งหมดของฉัน ฯลฯ ใน. bash_profile ของฉันยังทำงานได้ตามที่คาดไว้ tmux ยังแสดงสีโดยไม่เกิดเหตุการณ์ตามecho -ne "\033[1;33m hi"ที่คาดgls --colorไว้

บรรทัดที่เกี่ยวข้องในปัจจุบันใน. bash_profile ของฉันคือexport PS1="\[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\]"ถึงแม้ว่าในตอนแรกฉันจะหาสคริปต์ที่อยู่ในไฟล์. bash_prompt เพื่อจัดการกับเงื่อนไขบางอย่าง ฯลฯ ฉันพยายามเปลี่ยนกลับเป็นเวอร์ชันที่ง่ายกว่า

การดำเนินการbashจะทำให้พรอมต์เปลี่ยนสี แต่ต้องทำในแต่ละบานหน้าต่าง export PS1=[that long string I've already posted]จะไม่

. tmux.conf ของฉันเป็นดังนี้:

set-option -g default-command "reattach-to-user-namespace -l /usr/local/bin/bash"
set -g default-terminal "xterm-256color"
set-window-option -g automatic-rename on
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"

ส่วนที่เกี่ยวข้องของ. bash_profile:

export TERM="xterm-256color"
if which tmux >/dev/null 2>&1; then
    test -z "$TMUX" && (tmux attach || tmux new-session)
fi

ฉันใช้ macOS Sierra, iTerm 2 ฉันได้ลองทั้งรุ่น homebrew ปัจจุบันของ bash และ system bash (ปัจจุบันใช้ homebrew), tmux 2.4

ฉันยังวางไว้touch testing_touch_from_bash_profileใน. bash_profile ของฉันในขณะที่อยู่ในเซสชั่น tmux ที่มีสองบานหน้าต่างฆ่าหนึ่งบานเปิดบานหน้าต่างและตรวจสอบว่าไฟล์นั้นถูกสร้างขึ้นจริง

echo $TERMxterm-256colorผลตอบแทน

ฉันมั่นใจว่าเมื่อออกจาก tmux การตั้งค่าการทดสอบการเปลี่ยนแปลงที่ฉันได้เดินออกมาจาก tmux และไม่มีกระบวนการ tmux ps -ax | grep tmuxกำลังทำงานอยู่บนระบบผ่านทาง

น่าแปลกที่การจัดหาสคริปต์. bash_prompt เปลี่ยนสีตราบใดที่ฉันทำในแต่ละบานหน้าต่าง tmux

ฉันดูที่/programming/21005966/tmux-prompt-not-following-normal-bash-prompt-ps1-wแล้วลองเพิ่มการตั้งค่าสถานะ --login หลังจากการเรียก bash ในบรรทัดแรก ของ. tmux.conf ของฉัน การเรียกใช้ tmux ด้วยtmux new bashจะทำให้บานหน้าต่างแรกเปลี่ยนสี แต่บานหน้าต่างถัดไปจะไม่

ตัวแปร $ PS1 ได้รับการยกย่องในทุก ๆ ด้านยกเว้นการเปลี่ยนสีฟิลด์ใด ๆ

ใครมีความคิดเห็นบ้าง


ลองคำพูดเดียว
Kevin

5
การPS1ตั้งค่าที่คุณโพสต์ไม่มีคำสั่งให้เปลี่ยนสี โพสต์การตั้งค่าจริงที่ทำงานนอก tmux นอกจากนี้คุณควรตั้งค่าPS1ใน.bashrcไม่ใช่ใน.bash_profile: .bash_profileอาจไม่ถูกดำเนินการเลยและการตั้งค่าอาจถูกแทนที่ในภายหลัง
Gilles 'หยุดชั่วร้าย'

คำตอบ:


3

PS1 ของคุณยังให้ผลลัพธ์ขาวดำ

อย่างไรก็ตามการเปลี่ยนกลับไปเป็นสีให้ฉันฉันดังนั้นคุณควรจะเข้าใจความแตกต่างที่ฉันใช้

$ echo $PS1
\[\033[01;31m\]\t \[\033[01;32m\]durrantm \[\033[02;36m\]\h \[\033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"` \[\033[00;33m\]$(git_branch)\[\033[00m\]\n\$

git_branch เป็นฟังก์ชั่นทุบตีที่ฉันมีคือ:

git_branch () { 
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

ของคุณเทียบกับของฉัน:

ป้อนคำอธิบายรูปภาพที่นี่

ใช้งานได้ดีกับ OSX และ Ubuntu


11

วิธีแก้ไขปัญหาของฉันคือการตั้งค่า

force_color_prompt=yes

.bashrcในของฉัน ตอนนี้ tmux prompt มีสี


ไม่แน่ใจว่าทำไมมันถึงมีพฤติกรรมแตกต่างกันใน tmux ไปจากด้านนอก แต่นี่ก็เป็นการหลอกลวงสำหรับฉันเช่นกัน
Matt Lacey

ฉันหมึก TH คุณควรระบุนี้: สิ่งที่คุณต้องทำคือการเรียกใช้คำสั่งและจากนั้นภายในระยะtmux tmux เซสชั่น source ~/.bashrcคุณต้องทำเช่นนั้นในแต่ละแผง
evaristegd

ขอบคุณงานนี้สำหรับฉันยังบน Ubuntu 18.04 gnome-terminal ด้วย
intijk

2

บนเครื่องของฉันทางออกคือการเพิ่ม

set -g default-terminal "xterm-256color"

~/.tmux.confไปยัง

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