私はフォローアップをしています。このチュートリアルtmux ウィンドウ生成を作成するためのスクリプトです。
tmux new-window t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp'
時にはtmuxを起動した後、myappを終了してそのディレクトリのシェルに戻りたいのですが、これはウィンドウを完全に終了させます。この問題を解決するための最良の方法は何ですか?少なくとも1つの答えには、シェルを実行し、そのシェルでコマンドを実行することが含まれていると思いますが、これを行う最善の方法はよくわかりません。
答え1
tmux new-window -t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp; $SHELL'
デフォルトのシェルは、前のコマンドが終了したときに開始されます(戻り値に関係なく、つまりそのコマンドを終了していない場合でも同様です)。
perl
プロセスが終了または失敗したときにのみシェルに入りたい場合(そして成功時にtmuxウィンドウを閉じるには)、次のようにします。
tmux new-window -t $SESSION:0 -k -n MAIN 'cd ~/main/ && perl -Ilib myapp || $SHELL'
答え2
tmux
cd
コマンドを実行して実行できるシェルが開きましたperl
。走りたくないならその他そのシェルで対話型セッションを続行する(またはウィンドウが使用されずに閉じられるのを防ぐためにset-remain-on-exit
)、次のことができます。
tmux new-window -t $SESSION:0 -k -n MAIN
tmux send-keys 'cd ~/main/ && perl -Ilib myapp' C-m
作成したシェルの下に別のシェルを持ち、そのシェルがコマンドを実行してtmux
対話型になるようにするには(後でシェルを実行する@n.stの答えとは異なり)、次のようにします。
tmux new-window -t $SESSION:0 -k -n MAIN 'bash --init-file <(echo "cd ~/main/ && perl -Ilib myapp")'
問題がbash
不完全な環境の場合は、次のようにします。
tmux new-window -t $SESSION:0 -k -n MAIN 'bash --init-file <(echo "source ~/.bashrc; cd ~/main/ && perl -Ilib myapp")'