가능합니까?
명령을 실행하고 싶지만 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
Fish 예제의 한 가지 문제점은 [read]의 [cmd] 및 [stdout]을 리디렉션하므로 후자가 무엇이든 인쇄하면 파이프됩니다.
하지만 일반적인 상황에서는 read가 아무 것도 인쇄해서는 안 된다고 생각합니다(특히 stdout으로). 따라서 괜찮을 것입니다.
편집하다: 정확한 의미 체계가 필요한 경우 다음을 사용하여 이를 달성할 수 있습니다 set var (cmd)
.set var (printf '%s' $out)
set var_err (printf '%s' $err)
답변2
가장 간단한 방법은 스트림 중 하나를 파일로 리디렉션하는 것입니다.
set tmpf (mktemp)
trap "rm $tmpf" EXIT
set var (cmd ^ $tmpf)
set var_err (cat $tmpf)