Làm cách nào để tôi có được tmux để mở một bộ pan mà không cần nhập thủ công?


30

Vì vậy, tôi muốn thực hiện một tmuxphiên dành riêng cho dự án bật lên một số lệnh nhất định trong một số bảng nhất định tự động. Theo hướng dẫn trực tuyếntmuxtrang hướng dẫn , đây là những gì tôi nghĩ ra cho một tệp cấu hình:

new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

Kết quả là ... không có gì. tmuxbắt đầu với một cửa sổ và một cửa sổ duy nhất trong cửa sổ đó mà không có lệnh nào được thực thi.

Làm thế nào tôi có thể tạo một tệp cấu hình thực sự cho phép tôi tạo một bộ cửa sổ và các ô với các lệnh nhất định được thực hiện trước?

Câu trả lời:


36

Tập tin cấu hình của bạn đang hoạt động, nhưng có một vài sự phức tạp.

Lệnh ngắn

Đầu tiên, các lệnh bạn đang bắt đầu (phiên bản của ls ) kết thúc chạy rất nhanh. Các cửa sổ và panen cho các lệnh được tạo, nhưng chúng biến mất ngay sau khi mỗi lệnh thoát.

Nếu mục tiêu của bạn là thực sự sử dụng các lệnh như vậy trong một cấu hình cuối cùng của bạn, thì có lẽ bạn nên sử dụng tùy chọn cửa sổ remain-on-exit(và có thể là tùy chọn phiên set-remain-on-exitđể cung cấp mặc định cho tất cả các cửa sổ được tạo trong phiên). Khi remain-on-exitđược đặt cho một cửa sổ, nó sẽ không biến mất khi lệnh thoát. Bạn có thể sẽ muốn ánh xạ respawn-windowtới một khóa (lưu ý: respawn-windowsẽ hồi sinh lệnh ban đầu; respawn-panecũng có sẵn trong tmux 1.5 để hồi sinh các bảng riêng lẻ).

bind-key R respawn-window

# set global r-o-e so that initial window of initial session gets it
set -g set-remain-on-exit on

# create a session and its windows/panes
new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

# restore global r-o-e
set -g set-remain-on-exit off

# let session r-o-e inherit from global value for future windows
set -u set-remain-on-exit

Hoặc, nếu bạn không nhớ cửa sổ ban đầu của mình là số 1 thay vì số 0, thì chúng ta có thể tránh thay đổi giá trị toàn cầu:

bind-key R respawn-window

# create a session with a throw-away window
new true

# for future windows, stay open after the command exits
set set-remain-on-exit on

# create the windows we really want
neww -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

# for future windows, revert r-o-e to global value
set -u set-remain-on-exit

Nếu bạn chỉ sử dụng lsnhư một lệnh giữ chỗ đơn giản và bạn thực sự có ý định đẻ trứng một số loại lệnh tương tác trong cửa sổ / panes của bạn, sau đó bạn nên có lẽ chỉ đẻ trứng lệnh mà bạn có ý định cuối cùng chạy. Nếu lệnh dự định của bạn mất quá nhiều thời gian để khởi động để sử dụng nó trong tmux thử nghiệm, sau đó thay thế một vỏ hoặc lệnh tương tác đơn giản khác (ví dụ top, sqlite3vv).

new-session Là lệnh mặc định

Thứ hai, chạy tmux mà không có đối số lệnh (ví dụ tmux) tương đương với việc sử dụng new-sessionlệnh (tức tmuxlà giống như tmux new-session). Bạn .tmux.conftạo một phiên cho windows / panes của nó ( newlà bí danh cho new-session) và một phiên khác đang được tạo cho new-sessionlệnh ẩn được chỉ định bằng cách bắt đầu tmux mà không có đối số lệnh. Nếu bạn đang sử dụng thanh trạng thái mặc định, bạn sẽ thấy một [1]ở phía bên trái của thanh trạng thái khi bạn đang ở trong phiên ngoại lệ của nhà cái (phiên ban đầu được tạo trong .tmux.confsố 0).

Nếu bạn muốn tránh tạo phiên bổ sung, sau đó sử dụng tmux attachthay vì đơn giản tmux. Các lệnh từ bạn .tmux.confsẽ chạy, tạo phiên 0 và sau đó máy khách của bạn sẽ đính kèm vào phiên đó thay vì tạo một phiên mới.


2
OK, tôi có thể dày như một chiếc bánh sandwich cá voi ở đây, nhưng ngay bây giờ tôi đã có một tệp cấu hình chỉ có splitwtrong đó - không có gì khác - và tôi vẫn không nhận được màn hình chia nhỏ vì nó nói không thể thiết lập phiên hiện tại. Nếu tôi thêm newtrước nó, tôi sẽ nhận được ... một cửa sổ, một khung. Dường như tôi không thể có được hai tấm gương khi bắt đầu.
CHỈ CẦN HOẠT ĐỘNG CỦA TÔI NGÀY

1
Một tập tin cấu hình với new, sau đó splitwhoạt động cho tôi khi tôi bắt đầu tmux thông qua tmux attach. Một điều cần nhớ là .tmux.conf(hoặc tệp được chỉ định với -ftùy chọn) chỉ được sử dụng nếu không có máy chủ nào đang chạy. Kiểm tra xem một máy chủ đang chạy qua tmux ls. Nếu bạn muốn chạy các lệnh từ tệp khi máy chủ đang chạy, thì hãy thực hiện như sau: tmux source-file /path/to/conf-file-that-creates-a-session-and-windows \; attach(nếu bạn chạy lệnh này khi không có máy chủ, .tmux.conf(hoặc -ftệp) sẽ chạy trước thì source-filetệp của bạn ).
Chris Johnsen

Tệp cấu hình đang được chỉ định bằng -f - vì vậy tôi sẽ sử dụng tmux new -f myconfig. Nội dung của tập tin cấu hình đó chỉ chứa newtheo sau splitw. Tôi đang giết bất kỳ và tất cả các quá trình tmux trước khi tôi thử dòng lệnh tmux -f myconfig. Tôi không nhận được hai tấm. Tôi thực sự cảm thấy hụt hẫng ở đây với những việc cần làm trong thời điểm này (ngoài việc chỉ từ bỏ tmux).
CHỈ CẦN HOẠT ĐỘNG CỦA TÔI đúng

4
@Just: Cho dù bạn có sử dụng -fhay không, tmuxkhông có đối số lệnh giống như tmux new-session(đối với các máy chủ mới, sẽ tạo một phiên mới trên đầu trang của bất kỳ tệp cấu hình nào của bạn). Cửa sổ phân tách trước của bạn được tạo trong phiên 0, nhưng new-sessionlệnh ẩn đang tạo (và đính kèm) một phiên bổ sung (phiên 1; tìm kiếm [1]trong dòng trạng thái của bạn). Sử dụng tmux -f myconfig attachđể tránh tạo phiên mới đang ẩn cửa sổ chia trước của bạn.
Chris Johnsen

1
OK, tôi đoán việc học đọc cuối cùng sẽ trả hết cho tôi. :) Cảm ơn những nỗ lực và câu trả lời. Bây giờ mọi thứ đều hoạt động tốt. Tôi ước có một danh tiếng "típ" ở đây để tôi có thể cung cấp cho bạn nhiều hơn là một câu trả lời được chấp nhận.
CHỈ CẦN HOẠT ĐỘNG CỦA TÔI

9

Tôi không chắc là tôi hiểu ý của bạn khi "nhập thủ công", nhưng đây là cách tôi làm. Tôi đã viết một kịch bản "tự khởi động" mà trình quản lý cửa sổ của tôi khởi chạy. Nó chứa:

tmux start-server                                                                                                                                                                                                                                                                                                                                                            
for i in ~/sessions_tmux/*.session; do "$i"; done

trong đó mỗi tệp .session trông giống như thế này:

#!/bin/bash

SESSION_NAME="flaskr_tutorial"
if [[ ! -z "$TMUX" ]] || [[ ! -z "$TMUX_PANE" ]]; then
    echo "Already inside a tmux session, do not know what to do"
    exit 1
fi
tmux -q has-session -t "$SESSION_NAME"
if [ $? ]; then
    exit 0
fi
NEWCWD=~/projects/flaskr/
( cd "${NEWCWD}"; tmux new-session -d -s "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'vim flaskr.py' Enter
( cd "${NEWCWD}"; tmux split -h -t "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'sudo tail -F -n 100 /var/log/messages | ccze' Enter

Đợi đã, còn nhiều nữa! Tôi có số lượng tệp .session ngày càng tăng mà tôi tải lên bằng konsole:

konsole --background-mode --profile Shell --tabs-from-file ~/sessions_tmux/work_console.tabs

nơi work_console.tabs trông giống như thế này:

.
.
.
title: projectx;;    command: tmux attach -t projectx
title: flaskr;;      command: tmux attach -t flaskr_tutorial
.
.
.

Sau đó, tôi nhấn F12 để khởi động konsole.


konsole dường như bị hỏng nên tôi đã chuyển sang Terminal , hoạt động tốt. Tôi có một bài viết chi tiết hơn về danh sách gửi thư của người dùng tmux.
John Schmitt

1
Chỉ cần một bình luận nhỏ, bạn có thể thay thế '! -z 'với' -n 'trong các bài kiểm tra của bạn;)
lilorox

6

giả sử bạn muốn khởi chạy 3 tác vụ giám sát máy chủ (ở đây là ping localhost), không cần phải làm rối với các tệp cấu hình và các phiên đã lưu. Tất cả có thể được thực hiện từ dòng lệnh.

tmux new-session 'ping  127.0.0.1' \; \
    split-window 'ping  127.0.0.1' \; \
    split-window 'ping  127.0.0.1' \; \
    select-layout even-vertical

Cảm ơn vì sự đơn giản - chính xác là ví dụ tôi đang tìm kiếm!
DSz

5

Tôi thấy teamocil rất hữu ích để tự động hóa các cửa sổ / phiên tmux.

Nó được viết bằng Ruby nên bạn cần cài đặt.

Đây là một cấu hình mẫu:

session:
  name: 'my project'
  windows:
    -name: vim
     root: '~/code/my_project'
     splits:
       - cmd: vim
       - cmd: guard

Bạn có thể sắp xếp các cửa sổ và chia nhỏ.


4

Một lựa chọn khác tương tự như teamcoil là tmuxinator , đó là sự phát triển tích cực và hoạt động khá tốt. Chúng tôi cũng khuyên dùng (và loại đánh giá) trên tmux tuyệt vời : Phát triển không có chuột hiệu quả từ Tủ sách thực dụng .


Tìm thấy nó sạch hơn một chút so với teamocil (nhưng dù sao cũng rất giống nhau) và hiện đang sử dụng nó. Tôi khá hài lòng với cách nó hoạt động!
Aktau

4

**

  • Tốt hơn Lưu phiên của bạn!

** Tôi thấy rằng đối với một quản trị viên lười biếng như tôi, tôi thà lưu phiên tmux, thay vì dành hàng giờ cố gắng để xây dựng nó một cách hoàn hảo. Tôi đang quản trị hơn 30 máy chủ và các phiên tmux của tôi rất năng động, với cấu hình thay đổi liên tục. Đó là một cơn đau ở cổ, cho đến khi tôi mới phát hiện ra tmux-resurrect plugin này thật tuyệt vời. Hãy thử một lần. Hiện tại, kho lưu trữ Ubuntu có tmux 1.8, plugin này cần 1.9, vì vậy bạn sẽ cần nâng cấp thủ công

sudo apt-get install python-software-properties software-properties-common
sudo add-apt-repository ppa:pi-rho/dev
sudo apt-get update
sudo apt-get install  tmux=2.0-1~ppa1~t

Sau đó bạn có thể cài đặt nó bằng cách

git clone https://github.com/tmux-plugins/tmux-resurrect ~/clone/path

Sau đó, dd dòng này ở dưới cùng của ~ / .tmux.conf (nếu ~ / .tmux.conf không có sẵn, hãy tạo một tệp trống)

run-shell ~/clone/path/resurrect.tmux

Tôi cũng thêm dòng này vào cuối ~ / .tmux.conf để plugin lưu phiên cho tất cả các chương trình tôi chạy

set -g @resurrect-processes ':all:'

Sau đó tải lại môi trường tmux.

tmux source-file ~/.tmux.conf

Đó là nó! Bạn xong việc rồi. Bây giờ, hãy chạy tmux như bình thường, thay đổi kích thước các bảng của bạn, tạo các bảng mới, tạo các phiên mới ... vv. Khi bạn hài lòng với cấu hình bạn đạt được (trong một số cửa sổ và một số phiên), chỉ cần nhấp vào ctrl + b sau đó ctrl + s để lưu phiên. Để kiểm tra kết quả, chỉ cần giết tất cả tmux

killall tmux

Sau đó, chạy lại tmux

tmux

Sau đó, từ bên trong tmux, nhấp vào ctrl + b rồi ctrl + r (để khôi phục) Một cách kỳ diệu, tất cả các cửa sổ, cửa sổ và phiên của bạn được khôi phục với cùng một hình dạng và sắp xếp. Hy vọng rằng điều này sẽ giúp.

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.