Làm cách nào để bắt đầu tmux với tệp đính kèm nếu có phiên


92

Nếu tôi sử dụng

tmux attach

Tôi có thể đính kèm vào một phiên đang chạy nhưng nếu không có phiên nào đang chạy, tôi chỉ gặp lỗi

no sessions

Làm cách nào tôi có thể tự động bắt đầu một phiên mới nếu không có phiên nào đang chạy? cái gì đó như

tmux attach-or-create-new-session

Câu trả lời:


51

Câu trả lời đơn giản hơn nhiều. Chỉ cần đặt điều này trong ~/.tmux.conftập tin của bạn :

# if run as "tmux attach", create a session if one does not already exist
new-session -n $HOST

Nếu bạn chạy tmux attachvà có một phiên, thì nó sẽ đính kèm vào phiên đó (cho dù đó đã được đính kèm hay chưa). Nếu chưa có phiên nào thì nó sẽ tạo một phiên cho bạn.


11
Đây là một thủ thuật gọn gàng, nhưng có một cảnh báo: nếu tmuxđược gọi mà không có đối số, nó sẽ tạo một phiên mới và sau đó tạo một phiên thứ hai ngay khi nó đạt đến dòng này trong bạn ~/.tmux.conf. Bạn có thể thấy vấn đề này bằng cách thực hiện tmux lssau khi tạo phiên đầu tiên . Trong thực tế, sau khi bạn đặt tệp này vào tệp của mình, bạn không thể gọi tmuxmà không có đối số nữa
Bruno Polaco

4
Vì vậy, bạn sẽ phải thêm một bí danh alias tmux="tmux attach"để ngăn chặn vấn đề này
rubo77

@BrunoPolaco: sự cảnh báo lớn với một phiên tmux trống rỗng luôn luôn chạy (ngoài việc nó trông không gọn gàng trong danh sách nhiệm vụ)?
rubo77

@ rubo77 Tài nguyên. Một số người có một vài công cụ mặc định, cửa sổ, panen, v.v ... được tạo khi họ khởi chạy tmux.
rovr138

129

Nếu đặt tên phiên của bạn là ổn, thì thật dễ thực hiện với new-sessionlệnh:

tmux new-session -A -s main

nơi mainlà tên phiên đó sẽ được gắn vào hoặc tạo nếu cần thiết.

Từ man tmux:

Các -Acờ khiến new-sessioncư xử như attach-sessionnếu phiên tên đã tồn tại; trong trường hợp này, -Dhoạt động như -dđến attach-session.

Cũng xin lưu ý rằng -Atùy chọn được giới thiệu trong phiên bản tmux 1.8từ ngày 26 tháng 3 năm 2013 , đối với các phiên bản trước đó, hãy sử dụng tmux attach || tmux.


10
+1 để sử dụng chức năng tích hợp và cung cấp đoạn trích tài liệu man
Ari Patrick

1
Trong danh sách bí danh của tôi : alias "tmux-attach-or-create-main-session=tmux new-session -A -s main". Cảm ơn vì tiền hỗ trợ! Trang hướng dẫn: openbsd.org/cgi-bin/man.cgi/OpenBSD-civerse/man1/tmux.1
Jeroen Wiert Pluimers

tmux: unknown option -- AĐiều này dường như chỉ có sẵn trong các phiên bản gần đây.
xApple

Đây là phương pháp tôi đã sử dụng, nhưng bạn không còn có thể sử dụng "tmux detach". Bạn cần sử dụng phím tắt <ctrl> b - d để lưu và thoát phiên hiện có.
Jess

2
[ -z "$TMUX" ] && exec tmux new -As .đây là những gì tôi sử dụng trong tôi .bashrc.
ryenus

30

Điều này sẽ bắt đầu một phiên mới nếu đính kèm gây ra lỗi:

tmux attach || tmux new

Vì vậy, một bí danh sẽ thực hiện công việc:

tm="tmux attach || tmux new"

Bạn thậm chí có thể làm cho nó ngắn hơn bằng cách thay đổi tmux attachchotmux a
Bruno Polaco

Trong khi đây là chức năng, giải pháp của Wesley Baugh sử dụng chức năng tích hợp của tmux để làm điều tương tự
Ari Patrick

fwiw đây có vẻ như là câu trả lời tốt nhất cho các phiên bản cũ hơn, trước khi -A được giới thiệu (ví dụ v1.6)
Christopher Peterson

3

Xem xét thêm các mục sau vào .bashrc

if [ -z "$TMUX" ]; then
    base_session='my_session'
    # Create a new session if it doesn't exist
    tmux has-session -t $base_session || tmux new-session -d -s $base_session
    # Are there any clients connected already?
    client_cnt=$(tmux list-clients | wc -l)
    if [ $client_cnt -ge 1 ]; then
        session_name=$base_session"-"$client_cnt
        tmux new-session -d -t $base_session -s $session_name
        tmux -2 attach-session -t $session_name \; set-option destroy-unattached
    else
        tmux -2 attach-session -t $base_session
    fi
fi

Bạn có thể thấy việc tôi sử dụng điều này trong tệp tài nguyên ZSH của tôi tại repo github của tôi


2

Để mở rộng câu trả lời của Wesley Baugh (đó là các phiên lồng nhau cho tôi khi được sử dụng trong .bashrc khi đăng nhập) và thêm một chút linh hoạt vì tôi thường sử dụng sudo -strên các máy chủ (sẽ tải lại .bashrc của tôi một lần nữa và lồng đôi) những gì tôi có trong .bashrc của tôi:

if [ -z "$TMUX" ] && [ ${UID} != 0 ]
then
    tmux new-session -A -s main
fi

Điều này kiểm tra phiên tmux và đảm bảo bạn không phải là siêu người dùng trước khi tạo phiên mới hoặc đính kèm với phiên hiện có tên main.


1

Drew Frank đã trả lời điều này tại đây: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r

Đây là tập lệnh mà tôi hiện đang sử dụng cho điều này (mặc dù, tôi đã chuyển trở lại màn hình do sự cố khác với tmux) /somewhere/on/your/path/ttmuxhoặc dưới dạng hàm shell:

#!/bin/sh
# many thanks to Drew Frank: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r
(tmux ls | grep -vq attached && tmux -2 at) || tmux -2

Các -2tùy chọn làm cho tmux giả định hỗ trợ thiết bị đầu cuối 256 màu, vì vậy những tùy chọn này có thể không phù hợp với tình huống của bạn.



1

Tôi đã cải thiện câu trả lời @SuperMagic một chút. Tôi đặt khối này ở đầu.zshrc

if [[ $TMUX = "" ]]; then
  # try to reattach sessions
  tmux ls | grep -vq attached && TMUXARG="attach-session -d"
  exec eval "tmux -2 $TMUXARG"
fi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.