.bashrc / .profile ไม่ถูกโหลดในเซสชัน tmux ใหม่ (หรือหน้าต่าง) - ทำไม?


95

เมื่อ tmux เริ่มหรือเปิดหน้าต่างใหม่จะไม่โหลด my .profileor .bashrc. ฉันลงท้ายด้วยการพิมพ์. ~/.bashrcทุกครั้ง มีวิธีทำให้สิ่งนี้เกิดขึ้นโดยอัตโนมัติหรือไม่?

คำตอบ:


150

ใช่ในตอนท้ายของคุณ.bash_profileให้วางบรรทัด:

. ~/.bashrc

ซึ่งจะเป็นแหล่งที่มาของไฟล์ rc โดยอัตโนมัติภายใต้สถานการณ์เหล่านั้นซึ่งโดยปกติจะประมวลผลเฉพาะโปรไฟล์

กฎเมื่อbashเรียกใช้ไฟล์บางไฟล์มีความซับซ้อนและขึ้นอยู่กับประเภทของเชลล์ที่เริ่มทำงาน (ล็อกอิน / ไม่ล็อกอินโต้ตอบหรือไม่เป็นต้น) พร้อมด้วยอาร์กิวเมนต์บรรทัดคำสั่งและตัวแปรสภาพแวดล้อม

คุณสามารถดูได้ในman bashผลลัพธ์เพียงแค่มองหาINVOCATION- คุณอาจต้องใช้เวลาในการย่อยและถอดรหัสแม้ว่า :-)


2
ปัญหาในการแก้ปัญหานี้คือในบางระบบ. bashrc เรียก. bash_profile
Honza

1
ให้ฉันแก้ไขตัวเอง: ระบบไม่มี. bashrc เรียก. bash_profile แต่คุณต้องแน่ใจว่าคุณไม่ได้ทำเอง
Honza

1
@Honza นั่นจะเป็นการตั้งค่าที่ผิดปกติที่สุดเพราะมันมักจะเป็นวิธีอื่น ใครบางคนสามารถจัดให้ทำแบบนั้นได้อย่างแน่นอน แต่เราต้องตั้งคำถามถึงความมีสติของพวกเขา :-)
paxdiablo

2
อันที่จริงมันกลายเป็นว่าฉันได้เตรียมที่จะทำแบบนั้น (และลืมไปแล้ว) คุณสามารถถามคำถามเกี่ยวกับสุขภาพของฉันได้ ... ;)
Honza

3
ฉันคิดว่านั่นคือคำถาม ....bashrc/.profile is not loaded on new tmux session (or window) — why?
dylnmc

17

การรัน bash ใช้ได้ผลอย่างชัดเจนสำหรับฉันโดยเพิ่มบรรทัดนี้ในไฟล์ ~ / .tmux.conf ของฉัน:

set-option -g default-command "exec /bin/bash"

1
สิ่งนี้ได้ผลสำหรับฉัน! อย่างไรก็ตามคุณไม่จำเป็นต้องมีส่วน "exec" ฉันได้เพิ่มบรรทัดต่อไปนี้ใน~/.tmux.conf : set -g default-command "/bin/bash". ขอบคุณเพื่อน
โจ๊กเกอร์

แต่คุณมีความคิดว่าเหตุใดจึงเกิดขึ้น ฉันสังเกตเห็นสิ่งนี้ทันทีหลังจากอัปเกรดจาก Ubuntu 16.04 เป็น 18.04.2 นี่เป็นข้อแตกต่างเดียวที่ฉันคิดได้ นอกจากนี้ฉันสังเกตเห็นว่าการกำหนดค่าบางอย่างพังและฉันต้องปฏิบัติตามไวยากรณ์ใหม่ (ดูเหมือนว่า tmux ได้รับการอัปเดตแล้วเช่นกัน แต่ฉันจำเวอร์ชัน tmux ที่ฉันเคยใช้ในการตรวจสอบก่อนหน้านี้ไม่ได้)
โจ๊กเกอร์

7

คำตอบเดิมให้คำตอบ แต่ไม่ได้อธิบายเหตุผล นี่คือ.

สิ่งนี้เกี่ยวข้องกับไฟล์ 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 ทุกคนตั้งค่าสิ่งนี้ในโปรไฟล์

อ้างอิง



1

วิธีแก้ปัญหาที่เหมาะกับฉันมีดังต่อไปนี้:

  • สร้าง.bash_profileไฟล์ถ้าคุณไม่มีใน~
  • ในตอนท้ายของการ.bash_profileใส่source ~/.bashrcหรือsource ~/.profile
  • รีสตาร์ท tmux

ตอนนี้ปัญหาควรได้รับการแก้ไขแล้ว


0

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

ในระยะสั้นtmuxwindows / sessions ใช้ล็อกอินเชลล์ซึ่งจะค้นหา~/.profileไฟล์อื่น ๆ เมื่อเริ่มทำงาน

สิ่งที่ฉันต้องการคือให้ zsh เริ่มต้นด้วยแต่ละtmuxหน้าต่างใหม่ดังนั้นฉันจึงใส่exec zshที่ด้านล่างของ~/.profileไฟล์.

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