Fish Shell에서 stdout 및 stderr을 별도의 변수로 캡처

Fish Shell에서 stdout 및 stderr을 별도의 변수로 캡처

가능합니까?

명령을 실행하고 싶지만 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 예제의 한 가지 문제점은 [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)

관련 정보