tmuxに手動で入力せずに一連のペインを開くにはどうすればよいですか?


30

そのため、tmux特定のペインに特定のコマンドを自動的にポップアップ表示するプロジェクト固有のセッションを作成します。オンラインチュートリアルtmuxマニュアルページに続いて、これが構成ファイル用に思いついたものです。

new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

結果は...何もありません。 tmux単一のウィンドウとそのウィンドウ内の単一のペインで起動し、コマンドは実行されません。

特定のコマンドが事前に実行された一連のウィンドウとペインを実際に作成できるようにする構成ファイルを作成するにはどうすればよいですか?

回答:


36

構成ファイルは機能していますが、いくつかの問題があります。

短命のコマンド

まず、開始しているコマンド(lsのインスタンス)は非常に迅速に実行を終了します。コマンドのウィンドウとペインは作成されますが、各コマンドが終了するとすぐに消えます。

最終的な構成でこのような「ワンショット」コマンドを実際に使用することが目標である場合は、おそらくウィンドウオプションremain-on-exit(およびセッションでset-remain-on-exit作成されたすべてのウィンドウのデフォルトを提供するセッションオプション)を使用する必要があります。ときは、remain-on-exitウィンドウのために設定されている場合、コマンドが終了、それは消えません。おそらく、マッピングしたいと思うでしょうrespawn-window(:ノートキーにrespawn-window元のコマンドを再出現します。respawn-paneまた、で提供されていますtmuxの個々のペインが再出現する1.5)。

bind-key R respawn-window

# set global r-o-e so that initial window of initial session gets it
set -g set-remain-on-exit on

# create a session and its windows/panes
new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

# restore global r-o-e
set -g set-remain-on-exit off

# let session r-o-e inherit from global value for future windows
set -u set-remain-on-exit

または、最初のウィンドウが0ではなく1であることを気にしない場合は、グローバル値の変更を回避できます。

bind-key R respawn-window

# create a session with a throw-away window
new true

# for future windows, stay open after the command exits
set set-remain-on-exit on

# create the windows we really want
neww -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

# for future windows, revert r-o-e to global value
set -u set-remain-on-exit

ls単純化されたプレースホルダーコマンドとしてのみ使用しており、実際にウィンドウ/ペインで何らかのインタラクティブコマンドを生成する場合は、おそらく最終的に実行する予定のコマンドを生成する必要があります。あなたの意図したコマンドが中にそれを使用するために起動する時間がかかりすぎる場合はtmuxはテスト、その後、シェルまたは他の単純な対話型のコマンド(例えば置き換えtopsqlite3など)。

new-session デフォルトのコマンドです

第二に、実行中のtmuxはをコマンドの引数(例なしはtmux)使用することと同じであるnew-session(つまり、コマンドをtmux同じですtmux new-session)。あなたは、.tmux.confそのウィンドウ/ペインのためのセッションを作成します(newの別名であるnew-session)と、別のセッションが暗黙のために作成されてnew-session起動することによって、指定されたコマンドtmuxのをコマンド引数なし。デフォルトのステータスバーを使用している場合[1]は、「追加」セッション中にステータスバーの左側にが表示されます(で作成された最初のセッション.tmux.confは番号0です)。

余分なセッションの作成を避けたい場合tmux attachは、plainの代わりに使用してくださいtmux。からのコマンド.tmux.confが実行され、セッション0が作成され、クライアントは新しいセッションを作成する代わりにそのセッションにアタッチします。


2
ここでクジラのサンドイッチのように太いのかもしれませんが、今splitwはそれだけの設定ファイルを持っています-他には何もありません-それはそれが言うので、まだ分割画面を取得していません現在のセッションを確立できません。そのnew前に追加すると、1つのウィンドウ、1つのペインが表示されます。私の人生では、起動時に2つのペインを取得することはできません。
ちょうど私の正しい意見

1
の設定ファイルはnew、を通じてtmuxsplitwを起動すると機能します。覚えておくべきことの1つは、サーバー(またはオプションで指定されたファイル)が既に実行されているサーバーがない場合にのみ使用されることです。サーバーが実行されているかどうかを確認します。サーバーが既に実行されているときにファイルからコマンドを実行する場合は、次のようにします(サーバーがないときにこれを実行すると、最初に(またはファイル)が実行され、次にファイルが実行されます)。tmux attach.tmux.conf-ftmux lstmux source-file /path/to/conf-file-that-creates-a-session-and-windows \; attach.tmux.conf-fsource-file
クリスジョンセン

設定ファイルは-fで指定されているので、行きtmux new -f myconfigます。その構成ファイルの内容には、後にのみ newが含まれsplitwます。コマンドラインを試す前に、すべてのtmuxプロセスを強制終了しますtmux -f myconfig。2つのペインが表示されません。私は、この時点を過ぎてどうするかについて本当に困っています(tmuxをあきらめることは別として)。
ちょうど私の正しい意見

4
@Just:あなたが使用しているかどうか-f、あるいはないtmuxコマンドの引数なしと同じであるtmux new-session(新しいサーバのために、何でもあなたのコンフィグファイルの上に新しいセッションをして作成されますされ、)。事前分割ウィンドウはセッション0で作成されますが、暗黙的new-sessionコマンドは追加のセッション(セッション1、[1]ステータス行で探します)を作成(および接続)します。tmux -f myconfig attach事前に分割されたウィンドウを隠している新しいセッションの作成を避けるために使用します。
クリスジョンセン

1
OK、読むことを学ぶことは最終的に私にとって報われると思います。:)努力と答えをありがとう。すべて順調に動作しています。ここに「ひっくり返る瓶」という評判があり、ただ受け入れられた答え以上のものをあなたに与えることができることを望みます。
ちょうど私の正しい意見

9

「手動で入力する」ことの意味を理解していないが、これは私がそれを行う方法です。ウィンドウマネージャーが起動する「自動起動」スクリプトを作成しました。を含む:

tmux start-server                                                                                                                                                                                                                                                                                                                                                            
for i in ~/sessions_tmux/*.session; do "$i"; done

各.sessionファイルは次のようになります。

#!/bin/bash

SESSION_NAME="flaskr_tutorial"
if [[ ! -z "$TMUX" ]] || [[ ! -z "$TMUX_PANE" ]]; then
    echo "Already inside a tmux session, do not know what to do"
    exit 1
fi
tmux -q has-session -t "$SESSION_NAME"
if [ $? ]; then
    exit 0
fi
NEWCWD=~/projects/flaskr/
( cd "${NEWCWD}"; tmux new-session -d -s "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'vim flaskr.py' Enter
( cd "${NEWCWD}"; tmux split -h -t "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'sudo tail -F -n 100 /var/log/messages | ccze' Enter

待って、まだあります!konsoleでロードする.sessionファイルの数は増え続けています。

konsole --background-mode --profile Shell --tabs-from-file ~/sessions_tmux/work_console.tabs

work_console.tabsは次のようになります。

.
.
.
title: projectx;;    command: tmux attach -t projectx
title: flaskr;;      command: tmux attach -t flaskr_tutorial
.
.
.

次に、F12を押してkonsoleを起動します。


konsoleが壊れているようなので、Terminalに切り替えました。tmux-usersメーリングリストに詳細な投稿があります。
ジョンシュミット

1
ほんの小さなコメントで、 '!を置き換えることができます。-z 'と' -n 'をテストで使用します;)
lilorox

6

3つのサーバー監視タスク(ここではlocalhostへのping)を起動したいとします。設定ファイルや保存されたセッションをいじる必要はありません。すべてコマンドラインから実行できます。

tmux new-session 'ping  127.0.0.1' \; \
    split-window 'ping  127.0.0.1' \; \
    split-window 'ping  127.0.0.1' \; \
    select-layout even-vertical

シンプルさをありがとう-まさに私が探していた例です!
dzz

5

Teamocilは、tmuxウィンドウ/セッションの自動化に非常に役立つことがわかりました。

Rubyで記述されているため、インストールする必要があります。

サンプル構成は次のとおりです。

session:
  name: 'my project'
  windows:
    -name: vim
     root: '~/code/my_project'
     splits:
       - cmd: vim
       - cmd: guard

ウィンドウと分割を配置できます。


4

チームコイルに似たもう1つの選択肢はtmuxinatorです。これは積極的な開発が行われており、非常にうまく機能します。それは驚くほどにもお勧め(、レビューのようなもの)ですtmuxは:生産マウスフリーの開発から実用的な本棚


Teamocilよりも少しクリーン(ただし、非常によく似ています)であることがわかり、現在使用しています。私はそれがどのように機能するかにかなり満足しています!
アクタウ

4

**

  • セッションをより良く保存しましょう!

**私のような怠け者の管理者にとっては、完全に構築するために何時間も費やすのではなく、tmuxのセッションを保存したいのです。私は30以上のサーバーを管理しており、私のtmuxセッションは動的であり、構成は常に変化しています。私が最近tmux-resurrectを発見するまで、これは首の痛み でした。試してみる。現在、Ubuntuリポジトリにはtmux 1.8があり、このプラグインには1.9が必要なので、手動でアップグレードする必要があります

sudo apt-get install python-software-properties software-properties-common
sudo add-apt-repository ppa:pi-rho/dev
sudo apt-get update
sudo apt-get install  tmux=2.0-1~ppa1~t

その後、次の方法でインストールできます

git clone https://github.com/tmux-plugins/tmux-resurrect ~/clone/path

次に、この行を〜/ .tmux.confの最後に追加します(〜/ .tmux.confが使用できない場合は、空のファイルを作成します)

run-shell ~/clone/path/resurrect.tmux

この行を〜/ .tmux.confの最後に追加して、実行するすべてのプログラムのセッションをプラグインが保存するようにします

set -g @resurrect-processes ':all:'

次に、tmux環境をリロードします。

tmux source-file ~/.tmux.conf

それでおしまい!できました。ここで、通常どおりtmuxを実行し、ペインのサイズを変更し、新しいペインを作成し、新しいセッションを作成します...など。(複数のウィンドウと複数のセッションで)到達した構成に満足したら、ctrl + b、次にctrl + sをクリックしてセッションを保存します。結果をテストするには、すべてのtmuxを強制終了します。

killall tmux

その後、再度tmuxを実行します

tmux

次に、tmux内でctrl + bをクリックし、ctrl + r(復元用)をクリックします。魔法のように、すべてのウィンドウ、ペイン、およびセッションが同じジオメトリと配置で復元されます。これが役立つことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.