私が使うなら
tmux attach
実行中のセッションにアタッチできますが、実行中のセッションがない場合、エラーのみが表示されます
no sessions
実行中のセッションがない場合、新しいセッションを自動的に開始するにはどうすればよいですか?何かのようなもの
tmux attach-or-create-new-session
答えははるかに簡単です。これを~/.tmux.conf
ファイルに入れるだけです:
# if run as "tmux attach", create a session if one does not already exist
new-session -n $Host
tmux attach
を実行していて、セッションがある場合は、そのセッションにアタッチされます(すでにアタッチされているかどうかに関係なく)。 notセッションがすでにある場合は、セッションが作成されます。
セッションに名前を付けても問題ない場合は、new-session
コマンドで簡単に実行できます。
tmux new-session -A -s main
ここで、main
は、必要に応じてアタッチまたは作成されるセッション名です。
man tmux
から:
-A
フラグはnew-session
がattach-session
ifセッションのように動作するようにします-nameはすでに存在しています。この場合、-D
は-d
からattach-session
のように動作します。
また、-A
オプションは tmux version 1.8
from 2013年3月26日 で導入されていることに注意してください。以前のバージョンでは、tmux attach || tmux
を使用します。
Attachでエラーが発生した場合は、新しいセッションが開始されます。
tmux attach || tmux new
したがって、エイリアスはその仕事をします:
tm="tmux attach || tmux new"
.bashrc
に以下を追加することを検討してください
if [ -z "$TMUX" ]; then
base_session='my_session'
# Create a new session if it doesn't exist
tmux has-session -t $base_session || tmux new-session -d -s $base_session
# Are there any clients connected already?
client_cnt=$(tmux list-clients | wc -l)
if [ $client_cnt -ge 1 ]; then
session_name=$base_session"-"$client_cnt
tmux new-session -d -t $base_session -s $session_name
tmux -2 attach-session -t $session_name \; set-option destroy-unattached
else
tmux -2 attach-session -t $base_session
fi
fi
my github repo にあるZSHリソースファイルで、これの使用を確認できます。
Wesley Baughの回答(ログイン時に.bashrcで使用した場合、二重のネストセッションでした)を拡張し、サーバーでSudo -s
を頻繁に使用するため、柔軟性を少し追加します(これにより、.bashrcを再び忠実にロードし、ダブルネスト)、これが私の.bashrcにあるものです:
if [ -z "$TMUX" ] && [ ${UID} != 0 ]
then
tmux new-session -A -s main
fi
これはtmuxセッションをチェックし、新しいセッションを作成する前、またはmain
という名前の既存のセッションにアタッチする前に、スーパーユーザーでないことを確認します。
@SuperMagicの回答を少し改善しました。このブロックを.zshrc
if [[ $TMUX = "" ]]; then
# try to reattach sessions
tmux ls | grep -vq attached && TMUXARG="attach-session -d"
exec eval "tmux -2 $TMUXARG"
fi
これを.shrcファイルまたはexec
と同様に使用している場合は、
if tmux ls
exec tmux attach
else
exec tmux
fi
ドリュー・フランクはここでこれに答えました: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r
これが私が現在このために使用しているスクリプトです(ただし、tmuxの別の問題が原因で画面に戻りました)/somewhere/on/your/path/ttmux
またはシェル関数として:
#!/bin/sh
# many thanks to Drew Frank: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r
(tmux ls | grep -vq attached && tmux -2 at) || tmux -2
-2
オプションを指定すると、tmuxは256色の端末サポートを想定するため、状況に適さない場合があります。
このブログ の代替ソリューションを次に示します。魅力のように機能します。
session="main" # Check if the session exists, discarding output # We can check $? for the exit status (zero for success, non-zero for failure) tmux has-session -t $session 2>/dev/null if [ $? != 0 ]; then # Set up your session fi # Attach to created session tmux attach-session -t $session
から man page
has-session [-t target-session] (alias: has) Report an error and exit with 1 if the specified session does not exist. If it does exist, exit with 0.