Câu trả lời:
Sử dụng:
tmux split-window "shell command"
Các split-window
lệ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 -c
chấm dứt nhanh chóng, bạn có thể đặt remain-on-exit
tù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 ping
kế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 -c
và 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 read
lệ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.
remain-on-exit
hoặc sử dụng cmd ; read
.
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:
--rcfile
: Làm thế nào để gọi bash, chạy các lệnh bên trong shell mới và sau đó trả lại quyền kiểm soát cho người dùng? | Tràn ngăn xếpTMUX_PANE
: Làm cách nào để tách cửa sổ chạy lệnh "tmux split-window" thay vì cửa sổ hiện tại?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.
man tmux | less -p remain-on-exit
...