Làm cách nào để tách một cửa sổ mới và chạy lệnh trong cửa sổ mới này bằng tmux?


28

Tôi đã thử

tmux -c "shell command" split-window

nhưng nó dường như không hoạt động.

Sử dụng tmux split-window, người ta có thể chia một cửa sổ mới.

CẬP NHẬT :

Sử dụng tmux split-window 'exec ping g.cn'có thể chạy lệnh ping, nhưng khi dừng, cửa sổ mới sẽ bị đóng.


4
man tmux | less -p remain-on-exit...
jasonwryan

Câu trả lời:


38

Sử dụng:

tmux split-window "shell command"

Các split-windowlệnh có cú pháp sau:

 split-window [-dhvP] [-c start-directory] [-l size | -p percentage] [-t
         target-pane] [shell-command] [-F format]

(từ man tmux, phần "Windows và Panes"). Lưu ý rằng thứ tự là quan trọng - lệnh phải xuất hiện sau bất kỳ tùy chọn nào trước đó xuất hiện và nó phải là một đối số duy nhất, vì vậy bạn cần trích dẫn nó nếu nó có khoảng trắng.


Đối với các lệnh như thế ping -cchấm dứt nhanh chóng, bạn có thể đặt remain-on-exittùy chọn đầu tiên:

tmux set-option remain-on-exit on
tmux split-window 'ping -c 3 127.0.0.1'

Cửa sổ sẽ vẫn mở sau khi pingkết thúc, nhưng được đánh dấu là "chết" cho đến khi bạn đóng nó bằng tay.

Nếu bạn không muốn thay đổi các tùy chọn tổng thể, có một cách tiếp cận khác. Lệnh được chạy cùng sh -cvà bạn có thể khai thác điều đó để làm cho cửa sổ tồn tại ở cuối:

tmux split-window 'ping -c 3 127.0.0.1 ; read'

Ở đây bạn sử dụng readlệnh shell để chờ một dòng mới nhập vào sau khi lệnh chính kết thúc. Trong trường hợp này, đầu ra lệnh sẽ duy trì cho đến khi bạn nhấn Entertrong khung, và sau đó nó sẽ tự động đóng lại.


Cảm ơn Michawl Homer :-). Tôi tìm thấy nó quá ngay bây giờ /. Nhưng làm thế nào để giữ cho cửa sổ mới không bị đóng?
atupal

@atupal: Xem chỉnh sửa - đặt remain-on-exithoặc sử dụng cmd ; read.
Michael Homer

2

bash --rcfile

Kỹ thuật này mở một shell mới, chạy các lệnh và để bạn ở đó sau khi các lệnh kết thúc:

tmux-split-cmd() ( tmux split-window -dh -t $TMUX_PANE "bash --rcfile <(echo '. ~/.bashrc;$*')" )
tmux-split-cmd 'cd; pwd; ping google.com'

Hoặc nếu lệnh không có ký tự đầu cuối đặc biệt như ;:

tmux-split-cmd ping google.com

Điều này sử dụng:

Một biến thể thú vị khác là:

tmux-split-cmd-uniq() (
  if [ "$(tmux list-panes | wc -l | cut -d' ' -f1)" -ne 1 ]; then
    tmux kill-pane -t 1
  fi
  tms "$@"
)

cái này sẽ giết sự phân chia trước đó nếu nó đã tồn tại và chỉ giúp duy trì một lần phân tách thêm.

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.