Tạo phiên tmux mới từ bên trong phiên tmux


105

Tôi đang viết một tập lệnh shell tạo / đính kèm hoặc chuyển sang một phiên nhất định, tùy thuộc vào việc một phiên có bên trong tmux và phiên đó tồn tại hay không.

Tôi đã có mọi thứ hoạt động tốt ngoại trừ trường hợp yêu cầu tạo một phiên tmux mới từ bên trong một phiên tmux.

Khi tập lệnh của tôi thực thi tmux new-session -s name, tôi nhận được kết quả sau:

các phiên phải được lồng ghép cẩn thận, không đặt $ TMUX để buộc

Tôi thực sự không muốn lồng ghép các phiên, mục tiêu của tôi là tạo một phiên riêng biệt khác và chuyển sang nó từ bên trong phiên tmux .

Điều này có khả thi không?


2
Một nguồn lực lớn cho người dùng tìm kiếm câu hỏi này: leanpub.com/the-tao-of-tmux/read
0xSheepdog

Câu trả lời:


142

Cách nhanh nhất (giả sử bạn sử dụng ctrl-blàm tiền tố lệnh của mình) là:

ctrl-b :new

Để tạo một phiên mới, hãy

ctrl-b s

để tương tác chọn và đính kèm vào phiên.


5
1 cho giải pháp mà không quan tâm đến "phiên nên được lồng vào nhau một cách cẩn thận, unset $ tmux để lực lượng"
Marcin Rogacki

3
và sau đó bạn có thể đổi tên phiên của mình:ctrl-b $
nha

21
Ctrl-b :new -s <name>đặt tên cho phiên mới.
Ain Tohvri

32

Cách tạo tập lệnh

Tập lệnh này sẽ kiểm tra xem một phiên có tồn tại hay không. Nếu phiên không tồn tại, hãy tạo phiên mới và đính kèm vào đó. Nếu phiên không tồn tại, không có gì xảy ra và chúng tôi đính kèm vào phiên đó. Vui lòng thay thế `~ / development 'bằng tên dự án.

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

# ~/development

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

Phiên mới từ thiết bị đầu cuối

Hãy tạo hai phiên riêng biệt, liệt kê chúng, đính kèm vào một phiên và sau đó từ trong chu kỳ tmux qua các phiên.

tmux new -s name -dhoạt động từ bên trong tmux vì chúng tôi đang tạo một phiên tách rời mới. Nếu không, bạn sẽ gặp lỗi lồng ghép.

$ 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]

Phiên mới từ trong tmux

Chúng tôi hiện đang ở bên trong hoặc được biết đến với cái tên gắn liền với phiên mục tiêu của chúng tôi. Nếu chúng tôi cố gắng tạo một phiên mới trong khi đính kèm, nó sẽ dẫn đến lỗi lồng nhau.

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

Để giải quyết vấn đề này, chúng tôi tạo một phiên tách biệt mới. ví dụ,

$ 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]

Chu kỳ (chuyển đổi) Phiên

  • Prefix ( phiên trước
  • Prefix ) phiên tiếp theo

lưu ý: PrefixCtrl-btheo mặc định. Bạn có thể liên kết Prefixtới Ctrl-avà trong Mac OSX bạn có thể thay đổi Caps Lock để ctrlsystem preferences > keyboard > modifier keys

Đính kèm vào một phiên sử dụng chế độ lệnh khi bên trong tmux

Cố gắng gắn vào một phiên mà không tách ra sẽ dẫn đến lỗi.

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

Thay vào đó, hãy sử dụng chế độ lệnh, Prefix :sau đó nhập attach -t session_namevà nhấn enter.


Cảm ơn vì câu trả lời rất đầy đủ, điều này đã trả lời một số câu hỏi của tôi cùng một lúc!
mdekkers

24

Sử dụng cái này phù hợp với tôi:

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

Dòng TMUX=đầu tiên là bắt buộc để tmux không đưa ra sessions should be nested with care, unset $TMUX to forcethông báo.


1
Hoạt động tuyệt vời trong kịch bản của tôi sau khi thay đổi dòng đầu tiên thành:TMUX=`tmux new-session -d -s name`
Michael Robinson

17

Tất cả các lệnh bạn có thể khởi chạy trong thiết bị đầu cuối của mình, chẳng hạn như tmux new -s sessionNamecó thể được khởi chạy từ bên trong tmuxbằng cách nhấn phím kích hoạt (ví dụ ctrl-b:) sau :đó đến lệnh không có phần bắt đầu tmux.

Kết quả là, ctrl-b :tiếp theo new -s sessionNamesẽ làm chính xác những gì bạn muốn và đặt tên cho phiên của bạn. Nó cũng tự động chuyển sang phiên mới.


10

Bạn có thể thử unset TMUXtrước, điều này phù hợp với tôi.


7

theo lời khuyên của user2354696, tôi sử dụng các ràng buộc chính sau đây để tạo một phiên mới hoặc "sao chép" một phiên hiện có

bind-key N run-shell 'TMUX = tmux new-session -d \; switch-client -n '
bind-key C run-shell 'TMUX = tmux new-session -t $ (tmux display-message -p #S) -s $ (tmux display-message -p # S-clone) -d \; switch-client -n \; display-message "session #S clone" '
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.