sleepコマンドをtmux new-session -dに渡すことと何も渡さないことの違いは何ですか?

sleepコマンドをtmux new-session -dに渡すことと何も渡さないことの違いは何ですか?

私はtmux stdinにテキストを送信するスクリプトで遊んでいます(この答えに従ってhttps://unix.stackexchange.com/a/773049/189571投稿者:@Kamil Maciorowski)誤ってこれをしました。

tty=$(tmux new-session -d -s aux -PF "#{pane_tty}")
echo -n foo > $tty && tput cr > $tty && echo bar > $tty
tmux capture-pane -t aux -p -S0 -E3

結果は次のとおりです。foo PROMPT %> bar(無限に並べられ、PROMPTを印刷する)

そしてCamilleの提案に応じて同じですが、tail -f /dev/nulltmux new-sessionの引数としてコマンドを使用すると、bar私が期待した結果が得られます。

尾がなければ、すべてが失敗する理由を理解したいと思います。ここtail -f /dev/null一人しかいませんかsleep infinity?コマンドを渡さないこととの違いは何ですか?つまり、新しいセッションに何も渡さないと、セッションが終了するまでウィンドウはアクティブのままです。

答え1

tmux new-session新しいtmuxセッションの新しいtmuxウィンドウにある新しいtmuxウィンドウでコマンドを実行するには、コマンドを使用します。

tmux new-session代わりに、コマンドなしでインタラクティブシェルを起動してください。

あなたの場合は、PROMPT %>シェルによって印刷されたプロンプトです。私はあなたのechosラインがすぐに実行され、競合状態があり、プロンプトがtheとtty(ウィンドウから)の前後または間にfoo到着する可能性があると推測します。barfoobar

tput cr > $$tty$$行を解析したシェルのPIDに展開されるため、必須のttyには何も印刷されません。 leftまたはrightという一般的なファイルを作成した可能性が高く、そのファイル12345ttyの出力はtputそのファイル内にあります。

関連情報