コマンドの完了時にペイン/ウィンドウが閉じないようにする-tmux


33

私のtmux.confファイルでは、ウィンドウを開いたり、名前を付けたり、ペインをセットアップしたりするように設定しています。

しかし、私が抱えている問題の1つは、ペインの1つがコマンドを起動したls場合、たとえば、コマンドが(瞬時に)完了した後にペインが閉じることです。この動作を防ぐ方法はありますか?または、コマンドの完了後に通常のシェルにドロップしましたか?

私は、シェルを起動する必要があると仮定しています->ペインの起動時にコマンドを実行しますが、どうすればよいかわからない場合は気が滅入るでしょう。私はこの問題について少しグーグルで調べましたが、まだ足りませんでした。

回答:


22

いくつかのオプションがあります。

  1. lsウィンドウで実行する代わりに、シェルを実行し、実行するシェルキーストロークを送信します。

    tmux start-server  
    tmux new-session -d -s session  
    tmux new-window -t session:1  
    tmux send-keys -t session:1 ls C-m
    
  2. 他のコマンドが実行された後、bashシェルを離れるような方法で一連のコマンドをランチできます。

    tmux start-server  
    tmux new-session -d
    tmux new-window 'ls;bash -i'
    
  3. 出力を確認できるように、プロセスの終了後にペインをアクティブremain-on-exitに保つオプションの詳細については、jasonwryanの回答を参照してください。

  4. 一部のコマンドの出力を一度見るだけの価値がある場合は、更新する価値があるかもしれません。何かの出力を監視している場合watch、定期的に新しい出力を取得できます。これは以下のペインでうまく動作するはずですtmux

    tmux start-server  
    tmux new-session -d
    tmux new-window 'watch -n 60 ls'
    

ありがとう!素晴らしい答え、2番と4番はまさに私が働いていたものですが、1番も素晴らしい選択肢のようです。すべての助けをありがとう、それは本当にありがたいです(あなたの両方)。
シチュー

1
#1の利点は、コマンドがシェル履歴に残り、簡単に再実行できることです。コマンドが大きくてい場合、これは非常に役立ちます。
goertzenator

1
それはstart-serverコマンドなしで私のために働いています、必要であれば自動的に開始されると思います。それにもかかわらず明示的に呼び出すことの利点はありますか?
ルエーター

1
@luator tmuxこの回答を書いてから、サーバーが見つからない場合にサーバーを自動起動する機能が追加されたと思います。必要に応じてバージョンがサーバープロセスを生成する場合、利点はわかりません。
カレブ

13

次のremain-on-exitオプションを使用できます。

出口のまま[on | off]
このフラグが設定されたウィンドウは、実行中のプログラムが終了しても破壊されません。ウィンドウはrespawn-windowコマンドで再アクティブ化できます。

再生成プロセスを簡素化するには、キーにバインドすることをお勧めします。

bind-key R respawn-window

これにより、プログラムが終了したときにデッドウィンドウが残らないようになります。


そこに着いた!私は時間を使い果たし、答えを編集しなければならないと決めました。はい、これは3番目のオプションです。主な欠点は、再作成せずに再利用できない読み取り専用ウィンドウが残ることです。
カレブ

いい視点ね。(半)回避策で更新しました。
-jasonwryan

ペインで動作しますか?
-azmeuk

1
コマンドラインからこれを設定することで行うことができますtmux set-option remain-on-exit on
rmanna

1
@azmeukset-option -g remain-on-exit on bind-key r respawn-pane
HappyFace

1

send-keys@Calebが推奨する方法を使用した拡張例を次に示します

#!/bin/sh
tmux start-server
tmux new-session -d -n 'mywindowname'
tmux send-keys -t mywindowname 'cd notes' Enter 'vim whiteboard/tasks.md' Enter
tmux new-window -d -n 'secondwindowname' # this -d prevents focus from changing to the new window
tmux -2 attach-session -d
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.