มี tmux ที่เทียบเท่ากับ“ screen -D -R” หรือไม่


13

ฉันอยากจะรู้ว่าถ้ามีวิธีที่จะทำให้มันtmuxเป็นแบบscreen -D -Rนั้นฉันก็จะบอกว่ามีคำสั่งเป็นคำสั่งเริ่มต้นใน Putty

screenสวิตช์เหล่านี้จะบังคับให้แยกเซสชันหน้าจอที่มีอยู่สำหรับผู้ใช้ของฉัน (แม้ว่าจะยังคงใช้งานอยู่และเข้าสู่ระบบที่อื่น) และใส่กลับเข้าไปในเซสชันปัจจุบัน นอกจากนี้ในกรณีที่ไม่มีเซสชันหน้าจออยู่ก็จะสร้างใหม่

ฉันชอบ tmux และสามารถเห็นผลประโยชน์ที่ชัดเจนผ่านหน้าจอ แต่การมีอยู่ของคุณลักษณะนี้จะเป็นข้อตกลงที่แท้จริง

tmux attach ดูเหมือนจะไม่สร้างเซสชันใหม่หากไม่มี

man page สำหรับ tmux พูดว่า:

หากไม่มีเซิร์ฟเวอร์เริ่มทำงาน Attach-session (Attach) จะพยายามเริ่มต้น สิ่งนี้จะล้มเหลวหากไม่ได้สร้างเซสชันในไฟล์กำหนดค่า

ส่วนที่เป็นตัวหนาหมายถึงอะไร (ฉันไม่พบตัวอย่างของการสร้างเซสชันในไฟล์ conf)


จากหน้าชายคนนั้น: " แฟ้มการกำหนดค่าเป็นชุดของtmuxคำสั่งที่จะดำเนินการในลำดับเมื่อเซิร์ฟเวอร์จะเริ่มต้นครั้งแรก. " - คุณจริงอาจมีattachหรือเป็นเส้นในของคุณnew-session .tmux.conf
sr_

@sr_ อืมเมื่อเซิร์ฟเวอร์เริ่มทำงานครั้งแรกnew-sessionจะเกิดขึ้นต่อไป ...
Chris Down

เพิ่งพบคำถามนี้ (ปิด) ใน SO คำถามเดียวกันกับคำตอบที่คล้ายกัน stackoverflow.com/q/3432536/168034
phunehehe

คำตอบ:


15

ใช่:

$ tmux attach -d || tmux new

-dจำเป็นต้องทำตัวเหมือน screen -Dถอดคนอื่นออก

เชื่อมต่อโดย ssh แล้วแนบหรือสร้างอาจเป็นสิ่งที่ต้องการ:

$ cat bin/stmux
#!/bin/sh
exec ssh -t $@ 'tmux attach -d || tmux new'

$ stmux my.remote.box

1
ใช่ - นี่เป็นวิธีที่มีประสิทธิภาพที่สุดในการบรรลุสิ่งที่ฉันขอ ในทำนองเดียวกันฉันไม่อนุมัติnew-sessionในไฟล์กำหนดค่าในกรณีที่คุณต้องการแก้ไขและโหลดซ้ำในระหว่างเซสชัน tmux
Geeb

4

หากต้องการtmux attachสร้างเซสชันใหม่เมื่อไม่มีเซสชันให้ใช้ตัวเลือกnew-sessionในไฟล์ tmux config สร้างไฟล์~/.tmux.confหากไม่มีอยู่และเพิ่ม

new-session

เพื่อมัน นอกจากนี้ฉันนามแฝงtmuxที่tmux attach:)


1
ฉันไม่ต้องการให้มีnew-sessionใน~/.tmux.confเพราะถ้าผมโหลดการตั้งค่าการใช้คำสั่งsource-file ~/.tmux.conf(ดูนี้ ) เซสชันใหม่จะเปิดตัว ใช่ฉันสามารถฆ่ามันแล้วแนบไปกับอันก่อนหน้า แต่มันน่ารำคาญนิดหน่อย
mmoya

3

คุณสามารถเลียนแบบสิ่งนี้ได้ด้วยฟังก์ชั่นเชลล์สิ่งนี้ควรใช้ได้กับเชลล์ที่สอดคล้องกับ POSIX:

tmux() {
    if [ "$#" -ge 1 ] && [ "$1" = -z ]; then
        shift
        command tmux detach 2>/dev/null
        command tmux attach "$@" || command tmux new-session "$@"
    else
        command tmux "$@"
    fi
}

ตอนนี้ถ้าคุณเรียกใช้มันtmux -zควรดำเนินการตามที่คุณต้องการ


2

อันนี้ใช้งานได้ดีกว่าสำหรับฉันเล็กน้อย:

tmux new-session -AD -s <session-name>

1

ฉันพบว่ามันใช้งานได้ดีที่สุดสำหรับฉันใน. bashrc

if [[ -z $TMUX ]]; then
  tmux attach-session || tmux new-session
fi

สิ่งนั้นอธิบายส่วนที่เป็นตัวหนาใน OP ได้อย่างไร
Anthon

0

หากคุณกำลังใช้สิ่งนี้อยู่ในไฟล์. shrc หรือคล้ายกับที่execฉันแนะนำ

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