💻
特定のディレクトリに移動したらtmuxを自動的に起動する
コマンドラインと日々戯れているソフトウェアエンジニアの皆さんこんにちは!皆さんtmuxは使っていますか? とっても便利ですよね。
ただ使っているうちに、段々tmuxを起動するのがめんどくさくなってくる瞬間はありませんか? 例えば特定のプロジェクトでtmuxを使う時に、下記のように毎回同じセッション名を指定して起動するのってだるいですよね。
$ cd my-project
$ tmux new-session -t my-project
コマンドラインでそのディレクトリに移動したら、もう自動でtmuxを起動するようにすればいいんじゃないか?ってことでちょっとしたスクリプトを書いてみました。
.tmuxstart
というファイルがあるディレクトリに移動したら自動的にtmuxを起動するようにしています。すでにtmuxのセッションにいる時にはそのディレクトリに移動しても何も起きません。また、同名のセッションがすでにtmuxで起動されている場合には、そのセッションに自動的にattachするようにしています。
# 自動的に起動したいディレクトリの.tmuxstartにセッション名を記述
$ echo 'my-project' > .tmuxstart
function check_tmuxstart --on-variable PWD
# すでに tmux 内なら何もしない
if set -q TMUX
return
end
# .tmuxstart が存在するか確認
if test -f .tmuxstart
# セッション名を取得(エスケープ処理付き)
set session_name (cat .tmuxstart | string trim | string escape)
# .tmuxstart に何も書かれていなければ何もしない
if test -z "$session_name"
echo "Warning: .tmuxstart is empty."
return
end
# セッション名が無効な場合(空白や特殊文字のみの場合)処理しない
if not string match -rq '^[a-zA-Z0-9_-]+$' "$session_name"
echo "Error: Invalid session name in .tmuxstart -> '$session_name'"
return
end
# 既存の tmux セッションを確認
if tmux has-session -t $session_name 2>/dev/null
echo "Attaching to existing tmux session: $session_name"
tmux attach-session -t $session_name
else
echo "Creating new tmux session: $session_name"
tmux new-session -s $session_name
end
end
end
僕はfishシェルを使っているので、fishシェルスクリプトで記述しています。このスクリプトを ~/.config/fish/config.fish
などに記述して source
コマンドで読み込んであげれば、準備完了です。
.tmuxstart
があるディレクトリに移動したら指定したセッション名でtmuxが自動的に起動するようになりました。これで日々の小さなストレスが一つ減ったので良かったです。そんじゃーね!
おまけ
ちなみに、上記のfishシェルスクリプトの大部分はChatGPTに書いてもらいました。シェルスクリプトを書きたい気分じゃないときでもAIに書かせられるのはとても便利ですね。
Discussion