私は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/null
tmux new-sessionの引数としてコマンドを使用すると、bar
私が期待した結果が得られます。
尾がなければ、すべてが失敗する理由を理解したいと思います。ここtail -f /dev/null
一人しかいませんかsleep infinity
?コマンドを渡さないこととの違いは何ですか?つまり、新しいセッションに何も渡さないと、セッションが終了するまでウィンドウはアクティブのままです。
答え1
tmux new-session
新しいtmuxセッションの新しいtmuxウィンドウにある新しいtmuxウィンドウでコマンドを実行するには、コマンドを使用します。
tmux new-session
代わりに、コマンドなしでインタラクティブシェルを起動してください。
あなたの場合は、PROMPT %>
シェルによって印刷されたプロンプトです。私はあなたのecho
sラインがすぐに実行され、競合状態があり、プロンプトがtheとtty(ウィンドウから)の前後または間にfoo
到着する可能性があると推測します。bar
foo
bar
tput cr > $$tty
$$
行を解析したシェルのPIDに展開されるため、必須のttyには何も印刷されません。 leftまたはrightという一般的なファイルを作成した可能性が高く、そのファイル12345tty
の出力はtput
そのファイル内にあります。