Command-Substitution
將標準輸出和標準錯誤擷取為fish shell中的單獨變數
這甚至可能嗎?
我想執行一個命令,但將其 stdout 和 stderr 擷取為單獨的變數。目前我正在使用
set -l var (cmd)
,這使 stderr 保持不變。我可以set -l var (cmd ^&1)
將stdout和stderr合併到var中,但是我不能再輕易地將它們分開。有沒有辦法讓 var 和 var_err 從 cmd 中保存 stdout 和 stderr?
begin; cmd ^|read -z err; end |read -z out
您的魚範例中的一個問題是它重定向
$$ stdout $$兩者的$$ cmd $$和$$ read $$,所以如果後者列印任何東西,它將通過管道進行。
但我認為 read 在正常情況下不應該列印任何東西(尤其是到標準輸出),所以這應該沒問題。
編輯:如果
set var (cmd)
需要確切的語義,可以使用set var (printf '%s' $out)
andset var_err (printf '%s' $err)
最簡單的方法是將其中一個流重定向到文件:
set tmpf (mktemp) trap "rm $tmpf" EXIT set var (cmd ^ $tmpf) set var_err (cat $tmpf)