สร้างเซสชัน tmux ใหม่จากภายในเซสชัน tmux


105

ฉันกำลังเขียนเชลล์สคริปต์ที่สร้าง / แนบหรือสลับไปยังเซสชันที่กำหนดขึ้นอยู่กับว่ามีหนึ่งใน tmux หรือไม่และมีเซสชันอยู่

ฉันมีทุกอย่างที่ใช้งานได้ดียกเว้นในกรณีที่ต้องสร้างเซสชัน tmux ใหม่จากภายในเซสชัน tmux

เมื่อสคริปต์ของฉันทำงานtmux new-session -s nameฉันจะได้รับผลลัพธ์ต่อไปนี้:

ควรซ้อนเซสชันด้วยความระมัดระวังโดยไม่ตั้งค่า $ TMUX เพื่อบังคับ

ฉันไม่ต้องการจริงการประชุมรังเป้าหมายของฉันคือการสร้างเซสชันแยกต่างหากและสวิทช์ที่จะได้จากภายในเซสชัน tmux

เป็นไปได้หรือไม่


2
แหล่งข้อมูลที่ยอดเยี่ยมสำหรับผู้ใช้ที่พบคำถามนี้: leanpub.com/the-tao-of-tmux/read
0xSheepdog

คำตอบ:


143

วิธีที่เร็วที่สุด (สมมติว่าคุณใช้ctrl-bเป็นคำนำหน้าคำสั่ง) คือ:

ctrl-b :new

เพื่อสร้างเซสชันใหม่จากนั้น

ctrl-b s

เพื่อเลือกและแนบกับเซสชันแบบโต้ตอบ


5
+1 สำหรับโซลูชันที่ไม่สนใจ "เซสชันควรซ้อนกันด้วยความระมัดระวังยกเลิกการตั้งค่า $ TMUX เพื่อบังคับ"
Marcin Rogacki

3
จากนั้นคุณสามารถเปลี่ยนชื่อเซสชั่นของคุณได้:ctrl-b $
nha

21
และCtrl-b :new -s <name>ตั้งชื่อให้กับเซสชันใหม่
Ain Tohvri

32

วิธีสร้างสคริปต์

สคริปต์นี้จะตรวจสอบว่ามีเซสชันอยู่หรือไม่ หากไม่มีเซสชันให้สร้างเซสชันใหม่และแนบไป หากเซสชันไม่มีอะไรเกิดขึ้นและเราแนบไปกับเซสชันนั้น อย่าลังเลที่จะแทนที่ `~ / development 'ด้วยชื่อโครงการ

$ touch ~/development && chmod +x ~/development

# ~/development

tmux has-session -t development
if [ $? != 0 ]
then
  tmux new-session -s development
fi
tmux attach -t development  

เซสชันใหม่จากเทอร์มินัล

มาสร้างเซสชันแยกสองรายการรวมเข้ากับหนึ่งแล้วจากภายใน tmux วนไปตามเซสชัน

tmux new -s name -dทำงานจากภายใน tmux เนื่องจากเรากำลังสร้างเซสชันแยกใหม่ มิฉะนั้นคุณจะได้รับข้อผิดพลาดในการซ้อน

$ tmux new -s development -d
$ tmux new -s foo -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
$ tmux attach -t
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]

เซสชันใหม่จากภายใน tmux

ตอนนี้เราอยู่ภายในหรือที่รู้จักกันดีว่าแนบมากับเซสชันเป้าหมายของเรา หากเราพยายามสร้างเซสชันใหม่ในขณะที่แนบจะส่งผลให้เกิดข้อผิดพลาดในการซ้อน

$ tmux new -s bar
> sessions should be nested with care, unset $TMUX to force

เพื่อแก้ปัญหานี้เราได้สร้างเซสชันแยกใหม่ เช่น,

$ tmux new -s bar -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> bar: 1 windows (created Wed Jan 13 17:19:35 2016) [204x54]

รอบ (สลับ) เซสชัน

  • Prefix ( เซสชั่นก่อนหน้า
  • Prefix ) เซสชั่นต่อไป

หมายเหตุ: Prefixเป็นCtrl-bค่าเริ่มต้น คุณสามารถผูกPrefixไปCtrl-aและ Mac OSX คุณสามารถเปลี่ยน Caps Lock เพื่อ Ctrlsystem preferences > keyboard > modifier keys

แนบกับเซสชันโดยใช้โหมดคำสั่งขณะอยู่ใน tmux

การพยายามแนบเซสชันโดยไม่ถอดออกจะทำให้เกิดข้อผิดพลาด

$ tmux attach -t development
> sessions should be nested with care, unset $TMUX to force

ใช้โหมดคำสั่งแทนPrefix :จากนั้นพิมพ์attach -t session_nameและกด Enter


ขอบคุณสำหรับคำตอบที่สมบูรณ์คำถามนี้ตอบคำถามของฉันได้สองสามข้อพร้อมกัน!
mdekkers

24

การใช้สิ่งนี้ได้ผลสำหรับฉัน:

TMUX= tmux new-session -d -s name
tmux switch-client -t name

TMUX=ในบรรทัดแรกเป็นสิ่งจำเป็นเพื่อให้ tmux ไม่โยนsessions should be nested with care, unset $TMUX to forceข้อความ


1
ใช้งานได้ดีในสคริปต์ของฉันหลังจากเปลี่ยนบรรทัดแรกเป็น:TMUX=`tmux new-session -d -s name`
Michael Robinson

17

คำสั่งทั้งหมดที่คุณสามารถเรียกใช้ภายในเทอร์มินัลของคุณเช่นtmux new -s sessionNameสามารถเรียกใช้จากภายในได้tmuxโดยการกดปุ่มทริกเกอร์ (เช่น :) ctrl-bจาก:นั้นคำสั่งที่ไม่มีtmuxส่วนเริ่มต้น

เป็นผลให้ctrl-b :ตามมาด้วยnew -s sessionNameจะทำสิ่งที่คุณต้องการและให้ชื่อที่จะเซสชั่นของคุณ นอกจากนี้ยังสลับไปยังเซสชันใหม่โดยอัตโนมัติ



7

ตามคำแนะนำของ user2354696 ฉันใช้การผูกคีย์ต่อไปนี้เพื่อสร้างเซสชันใหม่หรือ "โคลน" เซสชันที่มีอยู่

ผูกคีย์ N รันเชลล์ 'TMUX = tmux เซสชันใหม่ -d \; สลับไคลเอนต์ -n '
ผูกคีย์ C รันเชลล์ 'TMUX = tmux เซสชันใหม่ -t $ (tmux display-message -p #S) -s $ (tmux display-message -p # S-clone) -d \; สวิตช์ไคลเอนต์ -n \; แสดงข้อความ "เซสชัน # โคลน" '
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.