3 回答

TA貢獻1951條經驗 獲得超3個贊
在您的shell中復制&1(在我的示例中為5),在子shell中使用&5(這樣您將寫入父shell的stdout(&1)):
exec 5>&1
FF=$(echo aaa|tee >(cat - >&5))
echo $FF
將打印aaa兩次,一次是由于子外殼中的回顯,而第二次將打印變量的值。
在您的代碼中:
exec 5>&1
VAR1=$(for i in {1..5}; do sleep 1; echo $i; done | tee >(cat - >&5))
# use the value of VAR1

TA貢獻1856條經驗 獲得超11個贊
Op De Cirkel的答案具有正確的想法??梢赃M一步簡化(避免使用cat):
exec 5>&1
FF=$(echo aaa|tee /dev/fd/5)
echo $FF

TA貢獻1874條經驗 獲得超12個贊
這是捕獲stderr命令和出口代碼的示例。這是基于羅素·戴維斯(Russell Davis)的答案。
exec 5>&1
FF=$(ls /taco/ 2>&1 |tee /dev/fd/5; exit ${PIPESTATUS[0]})
exit_code=$?
echo "$FF"
echo "Exit Code: $exit_code"
如果該文件夾/taco/存在,它將捕獲其內容。如果該文件夾不存在,它將捕獲一條錯誤消息,并且退出代碼為2。
如果省略,2>&1則只會stdout被捕獲。
- 3 回答
- 0 關注
- 908 瀏覽
添加回答
舉報