Bash 将命令的输出捕获到变量中并保留新行
我有两个剧本Bash 将命令的输出捕获到变量中并保留新行,bash,command,Bash,Command,我有两个剧本parentScript.sh和childScript.sh 我希望能够在parentScript.sh内部调用childScript.sh,并返回在任何阶段发生的错误。i、 e.childScript.sh中发现的错误如下: echo "ERROR: Feed file missing for $siteTag" >&2 我知道怎么做 但是我有一种感觉,它被篡改了,我不能再printf将结果打印到一个好看的变量中。i、 e error+="$( { ./childS
parentScript.sh
和childScript.sh
我希望能够在parentScript.sh
内部调用childScript.sh
,并返回在任何阶段发生的错误。i、 e.childScript.sh
中发现的错误如下:
echo "ERROR: Feed file missing for $siteTag" >&2
我知道怎么做
但是我有一种感觉,它被篡改了,我不能再printf
将结果打印到一个好看的变量中。i、 e
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
中,正如我所想的那样,它确实这样做了,但它通过使用echo“$error”
或printf“$error”
以某种方式消除了这两行代码
这里有没有人知道一种解决方案,可以从多个命令中获取错误输出,但在childScript.sh
命令中保持对echo
的单独调用
编辑:输出应为
ERROR: Feed file missing for (..)
ERROR: Feed file missing for (..)
ERROR: Feed file missing for (..)
而是
ERROR: Feed file missing for (..) ERROR: Feed file missing for (..) ERROR: Feed file missing for (..)
$(..)
剥离尾随换行符。这在大多数情况下都非常有用,比如
echo "Welcome to $(hostname). Enjoy your stay."
然而,在你的情况下,它会破坏它一点。您只需添加一个:
error+="$( { ./childScript.sh | sed 's/Output/Useless/' 2>&4 1>&3; } 2>&1 )"$'\n'
这并不能解决一个命令中多行的问题,只能解决多行上多个命令的问题(编辑:挂起…尝试某些操作。@insidesin命令中的换行符不会被剥离或修改。如果您使用您所说的
echo“$error”
(而不是echo$error
或缺少引号),太好了。我想我知道发生了什么。当我从测试一迁移到另一个脚本时,我带来了我的更改,然后在现实世界的示例上进行测试…最终测试的命令调用比错误回音多,所以我想当我不能返回到每个错误的一行时,我就遇到了问题。我认为在e这是一个试图一次修复所有部件,以某种方式破坏一个部件修复另一个部件等的案例。谢谢。:)