将 grive 命令输出存储到 bash 脚本中的变量

将 grive 命令输出存储到 bash 脚本中的变量

我正在尝试创建一个脚本,使用以下命令将我的计算机与 Google Drive 同步格里夫工具。我想将grive命令的输出存储到 bash 变量中,但似乎无法让它工作。

一些谷歌搜索告诉我,可以使用以下语法将命令输出保存到变量中:

VARABLENAME=$(command)

稍后可以通过以下方式打印输出

echo ${VARIABLENAME}

但是,grive 命令似乎是个例外,因为当我使用这种语法时,它仍然会在终端中打印出输出,并且变量的内容为空。

我如何才能正确地将输出存储grive在变量中?

答案1

问题是grive命令输出到错误流 STDERR(文件描述符 2),它通常用于传递错误消息,而 STDOUT(文件描述符 1)用于显示任何程序的实际(成功时)输出(严格来说)。

我没有使用过grive,但根据你的说法,开发人员可能仅使用 STDERR 来显示来自命令的任何消息。

现在您使用的命令替换:

VARABLENAME=$(command)

会将 的 STDOUT 保存commandVARABLENAME,而不是 STDERR。因此变量为空,您会在终端上看到消息。

我建议:

VARABLENAME="$(command 2>&1)"

这会将 STDOUT 和 STDERR 都保存到变量中(在您的情况下仅为 STDERR,因为没有 STDOUT),因此您可以使用获得所需的结果echo "${VARIABLENAME}"

此外,由于没有 STDOUT,您可以将 STDERR 保存到变量中(概括而言,对于任何此类程序都是正确的):

VARABLENAME="$(command 2>&1 >/dev/null)"

相关内容