从命令捕获输出到变量保留新行

时间:2015-08-05 15:03:00

标签: bash command

我有两个脚本; parentScript.shchildScript.sh

我希望能够在childScript.sh内调用parentScript.sh并返回任何阶段内发生的错误。即在childScript.sh中发现的错误如下:

echo "ERROR: Feed file missing for $siteTag" >&2

我知道如何return the error out back towards the parent shell.

但是我觉得它被篡改了,我不能再将printf结果变成一个漂亮的变量。即。

error+="$( { ./childScript.sh | sed 's/Output/Useless/' 2>&4 1>&3; } 2>&1 )"
error+="$( { ./childScript.sh | sed 's/Output/Useless/' 2>&4 1>&3; } 2>&1 )"

本质上应该调用脚本两次,从两个脚本中获取错误并将它们存储在变量error中,就像我想的那样,但它以某种方式通过使用{{1}来消除这些行}或echo "$error"

有没有人知道这里的解决方案是设法从多个命令中获取错误输出,但在printf "$error"命令中保持对echo的单独调用?

编辑:输出应为..

childScript.sh

但是

ERROR: Feed file missing for (..)
ERROR: Feed file missing for (..)
ERROR: Feed file missing for (..)

1 个答案:

答案 0 :(得分:2)

$(..)剥离尾随换行符。这在大多数情况下非常有用,例如

echo "Welcome to $(hostname). Enjoy your stay."

然而,在你的情况下,它会破坏它。你可以添加一个:

error+="$( { ./childScript.sh | sed 's/Output/Useless/' 2>&4 1>&3; } 2>&1 )"$'\n'