.tmux.confでシェルコマンドを実行する方法

.tmux.confでシェルコマンドを実行する方法

.tmux.conf他のコマンドをクリックせずに最初からまたはtmuxが起動したときに自動的にシェルコマンドを実行するにはどうすればよいですか?

エイリアス、関数、またはスクリプトを作成する方法(例:

tmuxrc -> tmux + irssi

答え1

これが望むものではないようですが、解決策は次のとおりです。

.tmux.confでシェルコマンドを実行する方法

またはrun-shellその略語はですruntmuxマニュアルページから:

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表示されます。myprojectこれはtmuxの起動時にセッション名を指定したためです。

だから私の解決策は、コードスニペットを~/.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

このソリューションの利点は、さまざまなプロジェクトや環境にさまざまなスクリプトを指定できることです。

関連情報