Làm cách nào để chạy lệnh shell từ .tmux.conf
hoặc tự động khi tmux khởi chạy mà không phải nhấn bất kỳ lệnh nào khác?
Làm cách nào tôi có thể tạo bí danh, hàm hoặc tập lệnh, ví dụ như
tmuxirc -> tmux + irssi
Làm cách nào để chạy lệnh shell từ .tmux.conf
hoặc tự động khi tmux khởi chạy mà không phải nhấn bất kỳ lệnh nào khác?
Làm cách nào tôi có thể tạo bí danh, hàm hoặc tập lệnh, ví dụ như
tmuxirc -> tmux + irssi
Câu trả lời:
Có vẻ như bạn muốn gọi bên ngoài tmux từ vỏ của bạn chứ không phải thực hiện điều này từ bên trong tmux, do đó .tmux.conf
là sai chỗ. Bạn có thể sử dụng bí danh shell (đặt cái này trong .bashrc
mục đích sử dụng lại):
alias tmuxirc='tmux new-session -s irc irssi'
Mặc dù nó dường như không phải là những gì bạn đang tìm kiếm, giải pháp cho:
Làm cách nào để chạy lệnh shell từ .tmux.conf
là run-shell
, hoặc, ở dạng viết tắt của nó , run
. Từ tmux
trang người đàn ông:
run-shell shell-command (alias: run) Execute shell-command in the background without creating a win- dow. After it finishes, any output to stdout is displayed in copy mode. If the command doesn't return success, the exit sta- tus is also displayed.
Nếu bạn cần âm thầm khởi động một tập lệnh ở chế độ nền bất cứ khi nào bạn khởi chạy tmux
, bạn có thể sử dụng run "command > /dev/null"
.
Tôi làm một cái gì đó tương tự với một kịch bản. Khi tôi muốn kích hoạt tmux với cấu hình phát triển của mình, tôi gọi nó. Kịch bản lệnh trông giống như sau:
#!/bin/sh
tmux has-session -t development
if [ $? != 0 ]; then
tmux new-session -s development -n editor -d
tmux send-keys -t development 'cd /var/www/htdocs/' C-m
tmux send-keys -t development 'vim' C-m
tmux split-window -v -t development
tmux split-window -v -t development
tmux select-layout -t development main-horizontal
tmux send-keys -t development:0.1 'cd /var/www/htdocs/' C-m
tmux new-window -n console -t development
tmux send-keys -t development:1 'cd /var/www/htdocs/' C-m
tmux select-window -t development:0
fi
tmux attach -t development
Điều này mang lại cho tôi là một phiên tmux có 2 cửa sổ, cửa sổ 1 có phiên Vim ở phía trên màn hình, với hai thiết bị ở cuối màn hình thứ 3 trở xuống, tất cả đều được chỉ vào thư mục / var / www / htdocs / của tôi . Window 2 chỉ là một giao diện điều khiển toàn màn hình. Điều tốt về điều này là nó sẽ không tạo lại phiên nếu nó đã ở đó, nó sẽ chỉ gắn vào nó.
Có một display-message
lệnh trong tmux
, từ trang người đàn ông của nó:
display-message [-p] [-c target-client] [-t target-pane] [message]
(bí danh: hiển thị)
Hiển thị một tin nhắn. Nếu -p được đưa ra, đầu ra được in thành thiết bị xuất chuẩn, nếu không, nó được hiển thị trong dòng trạng thái máy khách đích. Định dạng của tin nhắn được mô tả trong phần FORMATS; thông tin được lấy từ khung mục tiêu nếu -t được đưa ra, nếu không thì khung hoạt động cho phiên được gắn với máy khách đích.
Và trong phần FORMATS, có một biến được đặt tên session_name
, nó sẽ được thay thế bằng tên của phiên nếu bạn sử dụng nó ở định dạng #{session_name}
.
Cố gắng chạy tmux display-message -p '#{session_name}'
khi bạn đang ở trong một phiên tmux. Có thể bạn sẽ thấy một số, đó là id của phiên bạn đã đính kèm. Chạy tmux ls
để kiểm tra danh sách phiên.
Tuy nhiên, khi bạn khởi động một tmux bằng cách tmux new -s myproject
, bạn sẽ thấy myproject
là đầu ra, nhưng không phải là một số. Bởi vì bạn đã chỉ định tên của phiên khi bạn bắt đầu tmux.
Vì vậy, giải pháp của tôi là đặt một đoạn mã trong ~/.bashrc
tệp:
# [tmux] load scripts in ~/.tmux on creating a new pane
# load order: __before__.sh, ${session_name}.sh, __after__.sh
function tmux_load_startup_scripts_by_session_name() {
if [[ -n ${TMUX} ]]; then
local env_before_script="${HOME}/.tmux/__before__.sh"
[[ -f "${env_before_script}" ]] && { . "${env_before_script}"; }
local env_main_script="${HOME}/.tmux/$(tmux display-message -p '#{session_name}').sh"
[[ -f "${env_main_script}" ]] && { . "${env_main_script}"; }
local env_after_script="${HOME}/.tmux/__after__.sh"
[[ -f "${env_after_script}" ]] && { . "${env_after_script}"; }
fi
}
tmux_load_startup_scripts_by_session_name
mkdir ~/.tmux
cat "__before__.sh" > ~/.tmux/__before__.sh
cat "__after__.sh" > ~/.tmux/__after__.sh
cat "sample.sh" > ~/.tmux/sample.sh
tmux new -s sample
Bạn sẽ thấy đầu ra trên mỗi bảng bạn tạo:
__before__.sh
sample.sh
__after__.sh
Ưu điểm của giải pháp này là bạn có thể chỉ định các tập lệnh khác nhau cho các dự án hoặc môi trường khác nhau.