背景:私はTilixをデフォルトの端末エミュレータとして使用します。 Tilix環境設定(スクリーンショット付き)で、Tilixの起動時に次のコマンドを実行するように設定しました。
/usr/bin/zsh -c "if [[ $(tmux ls 2>/dev/null | grep -q -E '^main.*attached.*'; echo $?) -ne 0 ]]; then tmux attach -t main || tmux new -s main; else /usr/bin/zsh; fi"
以下を確認してください。
- tmux セッション名が
main
次の場合- 失敗した場合は、次のtmuxセッションに接続しようとします。
main
- 失敗した場合は、名前付きの新しいtmuxセッションを作成して
main
接続します。
- 失敗した場合は、名前付きの新しいtmuxセッションを作成して
- それ以外の場合(成功した場合)、一般を開始します。
zsh
- 失敗した場合は、次のtmuxセッションに接続しようとします。
この複雑さがすべて発生する理由は、最初にtilixを起動したときにtmuxが実行され、接続されて起動されるためです。どの新しいtilixセッションまたは新しいタイリックスウィンドウlauched は main という既存の tmux セッションを作成したり、接続しようとしません。 (Tilixには独自のマルチウィンドウとウィンドウがあるため、tmuxセッションと混同しないでください)
上記のコードブロックを圧縮できるのか、それとも上記のコードブロックのより良いバージョンを思い出すことができるのか疑問に思います。
答え1
コマンドの置き換えは少し過ぎましたが、それ以外はかなり良いようです。終了コードを使用してください。if
^main.*attached.*
パターンが見つかるとそのパターンも^main.*attached
見つかり、同様に長いパターンが見つからないと短いパターンも見つかりません。より短いパターンのマッチングはより速いかもしれません。
/usr/bin/zsh -c "if ! tmux ls 2>/dev/null | grep -q -E '^main.*attached'; then tmux attach -t main || tmux new -s main; else /usr/bin/zsh; fi"
答え2
tmuxが十分に新しい場合は、次のことができます。
[ "$(tmux display -pt=main: '#{session_attached}' 2>/dev/null)" -gt 0 ] && exec tmux new -Asmain || exec zsh