Command-Substitution

將標準輸出和標準錯誤擷取為fish shell中的單獨變數

  • September 6, 2017

這甚至可能嗎?

我想執行一個命令,但將其 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

fish-shell/fish-shell #2463

您的魚範例中的一個問題是它重定向

$$ 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)

引用自:https://unix.stackexchange.com/questions/379996