Làm cách nào để chạy lệnh shell từ .tmux.conf


Câu trả lời:


9

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.conflà sai chỗ. Bạn có thể sử dụng bí danh shell (đặt cái này trong .bashrcmục đích sử dụng lại):

alias tmuxirc='tmux new-session -s irc irssi'

Tôi sử dụng zsh, nhưng nếu không chính xác 100%.
Emanuel Berg

14

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

run-shell, hoặc, ở dạng viết tắt của nó , run. Từ tmuxtrang 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".


6

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ó.


Bạn có thể muốn nhìn vào tmuxinator .
Chris Xuống

Làm thế nào để bạn thực hiện kịch bản này từ conf?
chovy

1

Có một display-messagelệ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 myprojectlà đầ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 ~/.bashrctệ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  

Sử dụng

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.

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.