.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_name
FORMATSセクションには、セッション名に置き換えられる形式で使用する変数があります#{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
このソリューションの利点は、さまざまなプロジェクトや環境にさまざまなスクリプトを指定できることです。