可能ですか?
コマンドを実行したいのですが、stdoutとstderrを別々の変数としてキャプチャしたいと思います。現在私はset -l var (cmd)
stderrを変更せずにそのまま維持するthisを使用しています。 stdoutとstderrをvarにマージすることはできますが、set -l var (cmd ^&1)
再び簡単に分離することはできません。
varとvar_errにcmdにstdoutとstderrを保存させる方法はありますか?
答え1
begin; cmd ^|read -z err; end |read -z out
~から魚の皮/魚の殻#2463、
Fish の例の 1 つの問題は [read] の [cmd] と [stdout] をリダイレクトするので、後者が何でも印刷するとパイプされます。
しかし、一般的な状況では、readが何も印刷してはならないと思います(特にstdoutで)。したがって、大丈夫でしょう。
編集する:正確なセマンティクスが必要な場合は、以下を使用してこれを達成できますset var (cmd)
。set var (printf '%s' $out)
set var_err (printf '%s' $err)
答え2
最も簡単な方法は、ストリームの1つをファイルにリダイレクトすることです。
set tmpf (mktemp)
trap "rm $tmpf" EXIT
set var (cmd ^ $tmpf)
set var_err (cat $tmpf)