簡體   English   中英

>>在不同的變量/數組中存儲/捕獲stdout和stderr(bash)

[英]>> 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM