`tput smcup`の後にstderrを保存/復元する方法

`tput smcup`の後にstderrを保存/復元する方法

次の人為的な例では、目的はサブコマンドのみを削除することです/dev/tty

result="$(
  tput smcup > /dev/tty
  tput cup 0 0 > /dev/tty
  echo 'meh' > /dev/tty
  echo 'nay' > /dev/stderr
  echo 'yay' > /dev/stdout
  tput rmcup > /dev/tty
)"; echo "result=[$result]"

次のように出力されます。

result=[yay]

しかし、stderrはnayもはやディスプレイに残りません。 stderrが引き続き表示されるようにするにはどうすればよいですか?出力は次のとおりです

nay
result=[yay]

実際の使用例は、サブコマンドがユーザーに一連の質問をし、stdoutに対する応答を計算し、エラーが発生した場合にエラーをstderrに送信することです。サブコマンドが完了したら、問題のある対話を消去し、標準出力を保存し、標準エラーを表示することが目的です。

ベストアンサー1

に書いたら標準エラー値は変数にキャプチャされません。この動作は意図的に設計された動作です。そのうちの1つを維持したい場合は、作成する必要がありnayます。標準出力それとも、もう一度開く必要があります。標準エラー〜のように標準出力(それはほぼ同じです)。

混乱を減らすために、この動作はtput smcupterminfo機能とは関係ありません。

また、入力された唯一の値は$result記録された出力です。標準出力。他のすべての出力はただちに端末に書き込まれます。この段落は、次のように、より直接的に書くことができます。

result='yay'

tput smcup
tput cup 0 0
echo 'meh'
echo 'nay'
tput rmcup

echo "result=[$result]"

おすすめ記事