[英]>> Store / Capture stdout and stderr in different variables/ in an array (bash)
我們的想法是將STDOUT和STDERR轉發到變量/數組,以創建將其記錄在文件中的可能性。 特別是應記錄STDERR。
向TheConstructor詢問,我找到了一個解決方案,我知道它應該適用於每種情況......
< 在不同變量(bash)中存儲/捕獲stdout和stderr >
我的bash不支持:
readarray
typeset: t_err
我的bash版本:
bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.
我的想法 :
function CMD() {
unset t_std t_err
eval "$( ($1 ; $1 >&2) 2> >(readarray -t t_err; typeset -p t_err) > >(readarray -t t_std; typeset -p t_std) )"
}
CMD "cp x.txt new_x.txt"
CMD "nocommand new_x.txt"
這些是bash給出的錯誤:
./test_files.sh: line 61: readarray: command not found
./test_files.sh: line 61: typeset: t_err: not found
我們的想法是將STDOUT和STDERR轉發到變量/數組, 以創建將其記錄在文件中的可能性
為什么重新發明輪子? 輸出到文件比變量簡單得多。
cp x.txt new_x.txt 1> out.txt 2> err.txt
如果你想在變量中存儲stdout和stderr,並且你有Bash版本3,你是否嘗試過@Constructor的第二個解決方案:
unset t_std t_err
# REPLACE "echo std; echo err >&2" with your real command
eval "$( (echo std; echo err >&2 ) 2> >(t_err=$(cat); typeset -p t_err) > >(t_std=$(cat); typeset -p t_std) )"
另外,請參閱@BinaryZebra答案中的進一步主題開發 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.