เซสชัน tmux ใหม่ไม่ได้มาไฟล์ bashrc


17

สรุป

เมื่อฉันสร้างเซสชั่น tmux ใหม่พรอมต์ของฉันจะดึงจากการกำหนดค่า bash เริ่มต้นและฉันต้องเรียกใช้ด้วยตนเองที่source ~/.bashrcกำหนดเอง

การวิเคราะห์

ฉันใช้เครื่อง RHEL 7 ฉันเริ่มสังเกตเห็นพฤติกรรมนี้หลังจากที่ทุบตีอัปเดตไปพักหนึ่ง แต่ยังไม่ได้ไปถามคำถามจนถึงตอนนี้

ตัวอย่างเช่นฉันปรับแต่งการแจ้งเตือนของฉันให้มีลักษณะดังนี้:

[user@hostname ~]$

เมื่อใดก็ตามที่ฉันเริ่มต้นเซสชั่น tmux ใหม่มันใช้สิ่งที่ดูเหมือนจะเป็นค่าเริ่มต้นทุบตี:

-sh-4.2$

การดำเนินการอย่างรวดเร็วของการsource ~/.bashrcแก้ไขปัญหาเสมอ แต่ก็น่ารำคาญที่ฉันต้องทำเช่นนี้ทุกครั้งที่ฉันต้องการแก้ไขสิ่งเล็ก ๆ มีความคิดเห็นเกี่ยวกับวิธีการใช้ tmux ในการทำเช่นนี้อีกครั้งโดยอัตโนมัติหรือไม่?

หากต้องการข้อมูลเพิ่มเติมใด ๆ ฉันยินดีที่จะให้

tmux.conf

สำหรับการอ้างอิงฉันมีtmux.confไฟล์ของฉันด้านล่างแม้ว่ามันจะไม่ค่อยเป็นสิ่งที่คุณจะเรียกว่ากำหนดเองได้

setw -g mode-keys vi

# reload tmux.conf
bind r source-file ~/.tmux.conf \; display-message " ✱ ~/.tmux.conf is reloaded"

คำตอบ:


19

เท่าที่ฉันรู้โดยค่าเริ่มต้นtmuxเรียกใช้เปลือกเข้าสู่ระบบ เมื่อbashถูกเรียกเป็นเปลือกเข้าสู่ระบบแบบโต้ตอบจะมองหา~/.bash_profile, และ~/.bash_login ~/.profileดังนั้นคุณต้องใส่source ~/.bashrcหนึ่งในไฟล์เหล่านั้น

อีกวิธีในการแก้ปัญหานี้คือการใส่ไฟล์ของคุณลง.tmux.confในบรรทัด:

set-option -g default-shell "/bin/bash"

1
ฉันเพิ่มsource ~/.bashrcบรรทัดลงในของฉัน.bash_profileพยายามออกจากระบบและกลับเข้ามาสร้างเซสชั่น tmux ใหม่ แต่ไม่มีการเปลี่ยนแปลง ความคิดใด ๆ
Justin W. Flory

1
พยายามที่จะใส่ในไฟล์ของคุณสาย.tmux.conf set-option -g default-shell "/bin/bash"สิ่งนี้จะช่วยแก้ปัญหาของคุณ (อย่างน้อยฉันก็หวังเช่นนั้น)!
andreatsh

หลังจากโหลดการกำหนดค่า tmux ของฉันอีกครั้งสิ่งนี้จะแก้ไขปัญหาของฉันได้! ต้องการแก้ไขคำตอบของคุณหรือสร้างคำตอบใหม่? ฉันยินดีที่จะทำเครื่องหมายว่าเป็นที่ยอมรับ :)
Justin W. Flory

คุณใจดีฉันแก้ไขคำตอบของฉันอย่างรวดเร็ว!
andreatsh

2
หมายเหตุสำหรับผู้ใช้ MacOS: ถ้าคุณได้ติดตั้งbashผ่าน Homebrew และนี้ไม่ได้ทำงานเปลี่ยนแปลงไป"/bin/bash" "/usr/local/bin/bash"

5

สิ่งนี้เกี่ยวข้องกับไฟล์ Bash init โดยค่าเริ่มต้น~/.bashrcจะใช้ในเชลล์แบบโต้ตอบและไม่ใช่การเข้าสู่ระบบ มันจะไม่ได้รับที่มาในเปลือกเข้าสู่ระบบ Tmux ใช้เปลือกเข้าสู่ระบบโดยค่าเริ่มต้น ดังนั้นเปลือกหอยที่ตั้งขึ้นโดย tmux ~/.bashrcเฮี๊ยบ

default-command เปลือกคำสั่ง

ค่าดีฟอลต์คือสตริงว่างซึ่งสั่งให้ tmux สร้างเชลล์ล็อกอินโดยใช้ค่าของdefault-shellอ็อพชัน

ไฟล์เริ่มต้นสำหรับ Bash

  1. โหมดเข้าสู่ระบบ:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(เฉพาะครั้งแรกที่มีอยู่)
  2. การโต้ตอบที่ ไม่ใช่การเข้าสู่ระบบ :
    1. /etc/bash.bashrc (Linux บางตัวไม่ได้อยู่ใน Mac OS X)
    2. ~/.bashrc
  3. ไม่ใช่แบบโต้ตอบ:
    1. ไฟล์ต้นฉบับใน $BASH_ENV

วิธีการแก้

ความต้องการในการโหลดแบบอินเทอร์แอคทีฟที่ไม่ใช่การเข้าสู่ระบบทำให้ผู้คนสับสนในสถานการณ์อื่นเช่นกัน ทางออกที่ดีที่สุดคือการเปลี่ยนความต้องการโหลด~/.bashrcเป็นแบบโต้ตอบเท่านั้นซึ่งเป็นสิ่งที่ distros บางอย่างเช่น Ubuntu กำลังทำ

# write content below into ~/.profile, or ~/.bash_profile

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

นี่ควรเป็นทางออกที่คุณต้องการ และฉันขอแนะนำให้ผู้ใช้ Bash ตั้งค่านี้ในโปรไฟล์

อ้างอิง


2

เพิ่มต่อไปนี้เพื่อ.tmux.conf:

set-option -g default-shell "/bin/bash"

ไม่ผลลัพธ์ตามที่ต้องการ

เมื่อเพิ่มsource "$HOME/.bashrc"ไปเท่านั้น~/.bash_profileยังผลลัพธ์ที่ต้องการ

สิ่งนี้จะทำงานกับเซสชัน tmux ที่แอ็คทีฟเมื่อเปิดหน้าต่างหรือบานหน้าต่างใหม่และเมื่อแยกและเปิดเซสชั่น tmux ใหม่

ทดสอบเมื่อ:

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