tmux tương đương với màn hình -Riên?


10

Các tmux attachlệnh đóng vai trò giống như một sự kết hợp của screen -rscreen -x- lần đầu tiên nó trys để đính kèm vào gần đây nhất là tách ra phiên, và sau đó nếu không có sẵn nó sẽ gắn vào một phiên hiện kèm theo. Tôi muốn mô phỏng hành vi của screen -R: đầu tiên hãy thử đính kèm vào một phiên tách ra, sau đó bắt đầu một phiên mới nếu không có phiên tách rời. Cách tốt nhất để đạt được điều này trong tmux là gì?

Câu trả lời:


12

Sau khi tham khảo ý kiến ​​các pháp sư của IRC, tôi tin rằng không có lệnh tmux nào có hành vi này. May mắn thay, nó khá dễ dàng để mô phỏng bằng cách sử dụng shell:

(tmux ls | grep -vq attached && tmux at) || tmux

Chỉnh sửa nhỏ để xóa kết quả đầu ra "không thể kết nối với máy chủ: Kết nối bị từ chối" trong trường hợp bạn đang khởi chạy một phiên mới:(tmux ls 2>/dev/null | grep -vq attached && tmux at) || tmux
l8nite 20/07/2015

3

Mặc dù những gì nó nói trong hướng dẫn sử dụng tmux:

             The target-session rules for attach-session are slightly
         adjusted: if tmux needs to select the most recently used session,
         it will prefer the most recently used unattached session.

Câu trả lời của Drew sẽ không hoạt động đúng trong một tình huống như:

0: 1 windows (created Wed Nov  7 23:51:08 2012) [177x47]
1: 1 windows (created Wed Nov  7 23:51:33 2012) [177x47] (attached)

tmux atsẽ đính kèm vào phiên cuối cùng (# 1) (mặc dù phiên này vẫn được đính kèm ở một nơi khác). Điều này phá hỏng toàn bộ ý tưởng chạy một số phiên tmux và chỉ gắn vào một phiên tách rời (để sử dụng mosh + tmux + iterm2 để tạo một thiết bị đầu cuối chuyển vùng hoàn hảo).

Một cách tiếp cận khác là chọn thủ công một phiên không đính kèm:

tmux ls | grep -vq attached && tmux at `tmux ls | grep -vm1 attached | cut -d: -f1`


Nắm bắt tốt! Các tài liệu không đồng bộ với hành vi thực tế. Tôi đã tạo một báo cáo lỗi cho việc này.
Drew Frank

Một bản vá được khắc phục để sửa lỗi này, vì vậy trong lần phát hành tiếp theo, nó sẽ hoạt động như quảng cáo.
Drew Frank

Là bản vá trong 1.8?
momeara

2

Tôi có xu hướng chỉ có hai phiên tmux tại một thời điểm, vì vậy tôi làm một cái gì đó như thế này trong mỗi cửa sổ thiết bị đầu cuối.

cửa sổ đầu cuối 0:

tmux attach -t 0 || tmux new

cửa sổ đầu cuối 1:

tmux attach -t 1 || tmux new

2

Điều này đã làm việc tốt nhất cho tôi:

if [ -z "$TMUX" ]; then
     (tmux ls | grep -vq attached && tmux at -t `tmux ls | grep -vm1 attached | cut -d: -f1`) || tmux new
fi

-T là cần thiết để đính kèm vào phiên thích hợp.


1

Thế còn

tmux attach || tmux new

hoặc thay vào đó chỉ tạo tệp ~/.tmux.confnếu nó không tồn tại và thêm

new-session

để nó tạo ra một phiên mới khi không có phiên nào khi bạn chạy tmux attach.

Nó cũng có thể có ích để tạo tmuxmột bí danh tmux attach.


Đề xuất đầu tiên sẽ đính kèm với các phiên tmux hiện được đính kèm (tương tự như màn hình -x), đây là điều tôi muốn tránh. Đề xuất thứ hai thể hiện vấn đề tương tự này và cũng có hậu quả không mong muốn là tạo các phiên tmux "phụ" khi tôi sử dụng lệnh tệp nguồn tmux để tải lại cấu hình.
Drew Frank
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.