ฉันต้องการเปลือกทุบตีเริ่มต้นของฉันตรงไปที่ tmux แทนที่จะต้องพิมพ์ tmux ทุกครั้ง
ฉันต้องการเปลือกทุบตีเริ่มต้นของฉันตรงไปที่ tmux แทนที่จะต้องพิมพ์ tmux ทุกครั้ง
คำตอบ:
ดูเหมือนว่าจะทำงาน ...
https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login
เพียงเพิ่มรหัสทุบตีต่อไปนี้ใน. bashrc ของคุณต่อหน้านามแฝง รหัสสำหรับเปลือกอื่น ๆ คล้ายกันมาก:
[[ $TERM != "screen" ]] && exec tmux
TERM
อาจจะมีการตั้งค่าอื่น ๆ บางอย่างโดยผู้ใช้.tmux.conf
ไฟล์ ดีกว่าที่จะตรวจสอบว่าTMUX
ตัวแปรถูกตั้งค่าหรือไม่
@ คำตอบของ StarNamer นั้นถูกต้อง แต่โดยทั่วไปแล้วฉันจะรวมการทดสอบต่อไปนี้เพื่อให้แน่ใจว่า (1) tmux มีอยู่ในระบบ (2) เราอยู่ในเชลล์แบบโต้ตอบและ (3) tmux ไม่พยายามทำงานภายใน ตัวเอง:
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
exec tmux
fi
อ้างอิง
command
เพื่อตรวจสอบการมีอยู่ของคำสั่ง - http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommand
แทนwhich
การตรวจสอบการมีอยู่ของคำสั่ง - https://unix.stackexchange.com/a/85250$PS1
เพื่อตรวจสอบเชลล์แบบโต้ตอบ - https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERM
ตัวแปรสภาพแวดล้อมที่คาดหวัง"สำหรับโปรแกรมทั้งหมดที่ทำงานภายใน tmux" - http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANEScommand
มาก่อน แต่ไม่รู้ว่ามันมีอยู่จริง
exec
คำสั่งไม่อนุญาตให้คุณออกจาก tmux โดยไม่ต้องลาออกจากสถานีทั้งหมด! : |
exec
แทนที่กระบวนการปัจจุบันด้วยกระบวนการใหม่ - ในกรณีนี้จะแทนที่เชลล์ล็อกอิน bash ด้วย tmux ดังนั้นเมื่อ tmux ออกจากนั้นไม่มีเทอร์มินัลอื่นที่จะถอยกลับไปเป็น :)
exec tmux
ด้วยรสชาติที่คุณต้องการของtmux attach
exec tmux
ใช้exec tmux new-session -A -s main
ดังนั้นฉันจะมีเซสชันที่เรียกว่า main และแนบไว้เสมอ (แทนที่จะสร้างใหม่ทุกครั้งที่ฉันเชื่อมต่อกับเครื่องระยะไกลของฉัน) แต่จะไม่เกิดปัญหาเหมือนกับการใช้tmux attach
ในกรณีที่ไม่มีเซสชัน (พบได้ที่นี่: unix.stackexchange.com/a/176885/256942 )
การเพิ่มบรรทัดเช่น
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session && exit;}
ในไฟล์ bashrc ของคุณอาจจะทำงานได้ หมายเหตุบรรทัดนี้จะออกจาก ssh และยุติการเชื่อมต่อเมื่อคุณถอดหรือออกจาก tmux ฉันชอบการกำหนดค่านี้เนื่องจากจะช่วยประหยัดการกดปุ่มเพื่อยกเลิกการเชื่อมต่อ แต่ถ้าคุณไม่รักสิ่งนี้ (ซึ่งฉันคิดว่าไม่น่าจะเป็นไปได้มาก) และจะยังคงอยู่ในเชลล์การเข้าสู่ระบบหลังจากการเลิกจ้างเพียงแค่ลบexit
ส่วน:
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session;}
นอกจากนี้โปรดทราบว่าคุณไม่ควรห่อtmux attach
ด้วยexec
เพราะจะทำให้การเชื่อมต่อถูกปิดเมื่อไม่มีเซสชัน tmux ที่จะแนบ
มีคำสั่งchsh
ที่เปลี่ยนล็อกอินเชลล์ man chsh
ปรึกษา
tmux
ไม่ใช่เชลล์มันเป็นเทอร์มินัลมัลติเพล็กเซอร์เช่นหน้าจอ GNU น่าสนใจมันสนับสนุน-c
ตัวเลือกตามหน้า manดังนั้นมันอาจทำงานเหมือนกับ shell ที่เพียงพอที่จะใช้เป็นเชลล์ล็อกอินของคุณ แต่ฉันคิดว่ามันจะไม่ทำงานอย่างถูกต้องในทุกสถานการณ์เช่นการล็อกอินแบบกราฟิกผ่าน gdm / kdm .
ssh $some_server echo foo
)
/etc/shells
ดังนั้นมันจึงเป็นเชลล์ล็อกอินที่ถูกต้อง
default-shell
ตั้งค่าในคอนฟิกูเรชัน tmux เพื่อชี้ไปที่เชลล์จริง
ฉันใช้เรียบร้อยแล้ว
case $- in *i*)
[ -z "$TMUX" ] && exec tmux
esac
.zshrc
ในของฉัน หากคุณกำลังใช้ทุบตีใส่ไว้ในของคุณ.bashrc
แทน
ฉันเพิ่งลองตั้งค่าtmux
เป็นเชลล์เริ่มต้นของฉัน ( chsh -s $(which tmux)
) และดูเหมือนว่าจะหยุดการประมวลผลคำสั่งโดยตรงผ่าน SSH เช่นssh $some_server echo foo
จะไม่สร้างผลลัพธ์ใด ๆ
ตรวจสอบ "เรียกใช้คำสั่งที่กำหนดเองแทนการขายของฉัน" และเขียนคำสั่งใดก็ตามที่คุณต้องการดำเนินการเมื่อเริ่มต้นเครื่องของคุณ
คำตอบข้างต้นไม่ได้ผลสำหรับฉัน - exec tmux
ป้องกันไม่ให้ฉันปิด tmux โดยไม่ต้องออกจากเชลล์ (ไม่ว่าจะเปิดด้วยCtrl
+ T
หรือจากเมนูแอปพลิเคชัน)
ฉันใช้ Linux Mint ซึ่งช่วยให้คุณจับคู่คีย์ลัดกับคำสั่งและ (ยกเลิก kosher เนื่องจากอาจเป็นไปได้บางอย่าง .. ) ฉันมี bash shells พร้อมคำสั่งที่เริ่มต้นที่นั่นเช่นWin
+ Alt
+ B
ทำbash -exec(vim)
ประโยคที่ซับซ้อนแก้ไข. bashrc ของฉันดังนั้นมันจึงทำหน้าที่เหมือนเปลือกหอยปกติ
tmux .bashrc
โหลดมากกว่าที่เป็นกลุ่มภายใต้สถานการณ์ที่หลังจากวางด้านบนที่ด้านบนของฉัน ฉันได้พันบรรทัดการเรียกใช้ tmux ไว้ใน if if คำสั่งตรวจสอบว่ามันกำลังทำงานในโหมดการโต้ตอบ
if command -v tmux>/dev/null; then
if [ ! -z "$PS1" ]; then # unless shell not loaded interactively, run tmux
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && tmux
fi
fi
คุณสามารถห่อสิ่งนั้นไว้ในบรรทัดเดียว แต่เพื่อความสะดวกในการอ่านฉันคิดว่าไม่เป็นไร
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &
การเพิ่มคำตอบของ @Louis Maddox ฉันจะรันส่วน tmux ด้วย;
(exec tmux attach || exec tmux new-session)
exec sh -c 'tmux a || tmux'
ซึ่ง (หลังจากดูคำตอบของคุณ) อาจจะทำให้สิ่งเลวร้ายเกิดขึ้นถ้า tmux ไม่สามารถเริ่มด้วยเหตุผลใด ๆ ..... ขอบคุณฉันจะใช้ของคุณจากนี้เป็นต้นไป :)
tmux new -A -s mysession
อาจจะทำงานด้วย
นี่คือของฉัน~/.profile
(ฉันใช้ksh93
):
if [[ -z "$TMUX" ]]; then
if tmux has-session 2>/dev/null; then
exec tmux attach
else
exec tmux
fi
fi
หากTMUX
ตัวแปรสภาพแวดล้อมไม่ได้รับการตั้งค่า / ว่างเราก็ยังไม่ได้อยู่ในเซสชั่น tmux ดังนั้น ...
หากtmux has-session
กลับมาพร้อมกับสถานะเป็นศูนย์ทางออก (จริง) มีเซสชันที่พร้อมใช้งานสำหรับการเชื่อมต่อ แนบไปกับมัน
ถ้าไม่สร้างเซสชันใหม่
เป็นไปได้ที่จะใช้tmux
เป็นเชลล์ล็อกอินของคุณ อย่างไรก็ตามหากคุณทำเช่นนี้ตรวจสอบให้แน่ใจว่าตั้งค่าdefault-shell
เป็นเชลล์จริงใน~/.tmux.conf
ไฟล์ของคุณ(ดูคู่มือ tmux สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้)
คุณสามารถ (และตอนนี้น่าจะควร) ใช้chsh
คำสั่งเพื่อตั้ง tmux เป็นเปลือกเริ่มต้นแล้วเพิ่มต่อไปนี้เพื่อ.tmux.conf
:
set-option -g default-shell /path/to/your/favourite/shell
เพียงจำไว้ว่าให้ปรับเปลี่ยนเส้นทางที่ส่วนท้ายของบรรทัด
ฉันรวมการตรวจสอบอย่างละเอียดเข้ากับการตรวจสอบเซสชันตามเงื่อนไขและวางการหมุนของฉันเองเพื่อสร้างเซสชันเริ่มต้นที่เชื่อมต่อหรือสร้างขึ้น ถ้าคุณไม่ได้อยู่ในเซสชั่น tmux อื่นหรือตรงตามเงื่อนไขการป้องกันอื่น ๆ
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
tmux a -t default || exec tmux new -s default && exit;
fi
ตามคำตอบเหล่านี้:
เพิ่มลงในของคุณ ~/.tmux.conf
set -g default-command /usr/local/bin/fish
ดังที่ Mikel ได้กล่าวไว้ในความคิดเห็นของเขาว่ามี tmux เนื่องจากเชลล์ล็อกอินของคุณสามารถมีผลข้างเคียง แต่คุณสามารถสร้างtmux
เชลล์เริ่มต้นได้อย่างแท้จริง เชลล์เริ่มต้นของผู้ใช้ถูกกำหนดใน / etc / passwd ดังนั้นคุณสามารถรูทและแก้ไข / etc / passwd เช่นsudo vi /etc/passwd
ค้นหาบรรทัดที่ขึ้นต้นด้วยชื่อผู้ใช้ของคุณ :/bin/bash
มันอาจจะจบลงด้วยการ เปลี่ยน / bin / bash เป็น / usr / bin / tmux และตอนนี้ tmux เป็นเชลล์ล็อกอินเริ่มต้นของคุณ
อย่างไรก็ตามไม่มีการรับประกันว่าสิ่งนี้จะไม่ทำให้เกิดปัญหา!
สิ่งที่อาจทำงานได้ดีกว่าคือการไม่ทำสิ่งใด ๆ ที่จำเป็นต้องมีสิทธิ์รูท ฉันจะพยายามสร้างไฟล์ใน directoy บ้านของฉันชื่อ. bash_login และเริ่ม tmux จากภายในไฟล์นั้น: `echo" tmux "> ~ / .bash_login
สิ่งนี้ควรใช้งานได้ แต่คุณต้องลองและค้นหาด้วยตัวเอง b / c เอกสาร bash นั้นไม่แม่นยำมากนักเกี่ยวกับไฟล์ที่อ่านและดำเนินการเมื่อใด
chsh
! ยกเว้นว่าวิธีการของคุณต้องเป็นรากและข้อผิดพลาดได้ง่าย วิ่งtmux
จาก.bash_login
เป็นมากขึ้นมีแนวโน้มที่จะทำลายการเข้าสู่ระบบจากระยะไกล
[[ $- != *i* ]] && return
ที่จะไม่เป็นห่วงอนันต์ (จากหน้าเดียวกัน)