【问题标题】:assign the multiline output of command to a variable将命令的多行输出分配给变量
【发布时间】:2018-01-29 11:27:32
【问题描述】:

我需要将命令的多行输出分配给一个变量。 我读了这两个线程:

assigning the output of a command to a variable in a shell script

Capturing multiple line output into a Bash variable

它适用于 echo 示例(多行命令):

#!/bin/bash
output="$( bash <<EOF
echo first
echo second
echo third
EOF
)"
echo "$output"

但它似乎不适用于具有多行输出的命令。当我跑步时

output="$( bash <<EOF
echo abc
uncrustify -c ~/.uncrustify.cfg --check filename
echo def
EOF
)"

我会收到第二行默认uncrustify -c ~/.uncrustify.cfg --check filename输出:

FAIL: filename (File size changed from 404 to 417)

uncrustify -c ~/.uncrustify.cfg --check filename 的默认输出是:

Parsing: filename as language OC
FAIL: filename (File size changed from 404 to 417)

我想将这两行都分配给输出变量并将所有输出隐藏到控制台。

【问题讨论】:

  • 第二部分是not working?你得到什么输出
  • 我收到了FAIL: filename (File size changed from 404 to 417) 出乎意料的信息。我不应该在控制台中得到任何东西。

标签: bash


【解决方案1】:

为什么不试试:

output=`echo abc && uncrustify -c ~/.uncrustify.cfg --check filename && echo def`

或者更好的是,让变量存储新行:

output="$(echo abc)\n$(uncrustify -c ~/.uncrustify.cfg --check filename 2>&1)\n$(echo def)"
echo -e "$output"

请注意-eecho 一起使用的标志,因为这使它能够将\n 序列转换为换行符。

【讨论】:

  • 我创建了 script.sh 并在其中添加了output="$(echo abc)\n$(uncrustify -c ~/.uncrustify.cfg --check filename)\n$(echo def)"(没有回显行)。我通过 ./script.sh 在控制台中运行脚本并得到FAIL: filename (File size changed from 404 to 417) 来控制台我不想要的东西。
  • 与您的第一个选项相同。
  • 我意识到FAIL: filename (File size changed from 404 to 417) 是来自stderr 的文本。如何将它也放入变量中?
  • 这是因为您的脚本打印到 stderr,您应该应用我编辑的答案中的行。
猜你喜欢
  • 2012-02-23
  • 2012-07-16
  • 2017-09-01
  • 1970-01-01
  • 2010-12-29
  • 2014-01-08
  • 2011-01-28
  • 1970-01-01
  • 2012-01-27
相关资源
最近更新 更多