適応中です。マーカス・ミュラーの答え 先週質問しました。標準出力をtmuxセッションにリダイレクトしてANSIエスケープシーケンスをレンダリングし、ウィンドウレンダリングをスクリプトの実際の出力にキャプチャするスクリプト。 stdoutで直接印刷して同じ結果を得ることができるので、まったく役に立たないことを知っています。ただし、これはより複雑な解釈を通じてコードをより大きなプロジェクトにインポートするためのデモであり、次の機能が必要です。
#!/bin/zsh
tmpdir="$(mktemp -d)"
fifo="${tmpdir}/fifo"
mkfifo "$fifo"
tmux new-session -d -s aux "while true; do cat ${fifo}; done"
exec 3>&1 1>"$fifo"
echo foo
echo bar
tput home
echo -n b
exec 1>&3 3>&-
tmux capture-pane -t "aux" -p -S0 -E1
tmux kill-session -t aux
rm -rf $tmpdir
出力は次のようになります(そしてそれが必要です)。
boo
bar
コードの簡素化に興味があります。メンテナンスが必要なFIFOの代わりに使用できるstdinリダイレクトに関連するトリックはありますか? 1行の方法ですべてのコンテンツを印刷し続け、完了したらセッションを自動的に閉じることができますか?
tmuxパイプウィンドウ、バッファ、トランスポートキー、実行シェルを試しましたが、うまくいきませんでした。特に、コマンド/スクリプトを実行するスクリプトのstdinではなく、コンソールにコマンドを作成するのと同じように、セッションがstdinを使用する場合
なんとか単純化しなければならないような感じがします。
ベストアンサー1
メンテナンスが必要なFIFOの代わりに使用できるstdinリダイレクトに関連するトリックはありますか?
新しいセッションに割り当てられたユニークウィンドウのユニークウィンドウの内容を尋ねますtmux
。tty
その後、印刷します。
#!/bin/zsh
tmux new-session -d -s aux 'tail -f /dev/null' || exit 1
tty="$(tmux display-message -p -t aux -F '#{pane_tty}')"
{
echo foo
echo bar
TERM=tmux tput home
echo -n b
} > "$tty"
tmux capture-pane -t aux -p -S0 -E1
tmux kill-session -t aux
tmux display-message -p
一般的に言えば、それから情報を得ることは非常に便利です。あなたの場合はttyに関する情報を直接得ることができ、tmux new-session
その変数は必要ありませんtty
。リダイレクトを設定するために、次の準備手順を実行する必要はありません。
{...} >"$(tmux new-session -d -s aux -P -F '#{pane_tty}' 'tail -f /dev/null')" || exit
注はtail -f /dev/null
tmuxウィンドウを「アクティブ」に保つためのコマンドです。スクリプトはコマンドに何も送信しようとしませんが、正しいttyに印刷します。この回答は、タイトル(「tmuxセッション内で実行される他のスクリプト/コマンドの標準入力へのスクリプトの標準出力リダイレクト」)には対応していませんが、必要な機能を提供します。