.tmux.conf에서 쉘 명령을 실행하는 방법

.tmux.conf에서 쉘 명령을 실행하는 방법

.tmux.conf다른 명령을 클릭하지 않고도 처음부터 또는 tmux가 시작될 때 자동으로 쉘 명령을 실행하려면 어떻게 해야 합니까 ?

별칭, 함수 또는 스크립트를 만드는 방법(예:

tmuxrc -> tmux + irssi

답변1

이것이 원하는 것이 아닌 것 같지만 해결책은 다음과 같습니다.

.tmux.conf에서 쉘 명령을 실행하는 방법

이거나 run-shell그 약어는 입니다 run. tmux매뉴얼 페이지 에서 :

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.

부팅할 때마다 백그라운드에서 자동으로 스크립트를 시작해야 하는 경우 tmux를 사용할 수 있습니다 run "command > /dev/null".

답변2

tmux 내부에서 호출하는 것이 아니라 쉘 외부에서 tmux를 호출하려는 것처럼 들립니다. 따라서 .tmux.conf잘못된 위치입니다. 쉘 별칭을 사용할 수 있습니다( .bashrc재사용을 위해 귀하의 별칭에 넣습니다).

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

답변3

나는 스크립트로 비슷한 일을했습니다. 개발 구성으로 tmux를 시작하려고 할 때 이것을 호출합니다. 스크립트 자체는 다음과 같습니다.

#!/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

이것이 나에게 제공하는 것은 2개의 창, 화면 상단에 Vim 세션이 있는 창 1, 화면 하단에 약 3개의 터미널이 있는 tmux 세션이며 모두 내 /var/www/htdocs/ 디렉토리를 가리킵니다. Window 2는 전체 화면 콘솔일 뿐입니다. 이것의 이점은 세션이 이미 존재하는 경우 세션을 다시 생성하지 않고 연결만 한다는 것입니다.

답변4

매뉴얼 페이지에는 display-message다음 명령이 있습니다.tmux

메시지 표시 [-p] [-c 대상 클라이언트] [-t 대상 창] [메시지]

(별칭: 디스플레이)

메시지를 표시합니다. -p가 주어지면 출력이 stdout으로 인쇄되고, 그렇지 않으면 대상 클라이언트 상태 줄에 나타납니다. 메시지 형식은 FORMATS 섹션에 설명되어 있습니다. -t가 지정되면 정보는 대상 창에서 가져오고, 그렇지 않으면 대상 클라이언트에 연결된 세션의 활성 창에서 정보를 가져옵니다.

session_nameFORMATS 섹션에는 세션 이름으로 대체되는 형식으로 사용하는 변수가 있습니다 #{session_name}.

tmux display-message -p '#{session_name}'tmux 세션에서 실행해 보세요. 연결하려는 세션의 ID인 숫자가 표시될 수도 있습니다. tmux ls세션 목록을 보려면 실행하세요 .

그러나 tmux 를 통해 tmux를 시작하면 숫자가 아닌 출력이 tmux new -s myproject표시됩니다 . myprojecttmux를 시작할 때 세션 이름을 지정했기 때문입니다.

그래서 내 해결책은 코드 조각을 ~/.bashrc파일에 넣는 것이었습니다.

# [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

생성된 각 패널에 출력이 표시됩니다.

__before__.sh
sample.sh
__after__.sh

이 솔루션의 장점은 다양한 프로젝트나 환경에 대해 다양한 스크립트를 지정할 수 있다는 것입니다.

관련 정보