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

qua*_*fly 4 bash grive

我正在尝试创建一个脚本,使用grive工具将我的计算机与谷歌驱动器同步。我想将grive命令的输出存储到 bash 变量,但我似乎无法让它工作。

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

VARABLENAME=$(command)

并且输出可以稍后打印

echo ${VARIABLENAME}

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

如何将 的输出grive正确存储在变量中?

hee*_*ayl 8

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

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

现在您使用的命令替换:

VARABLENAME=$(command)
Run Code Online (Sandbox Code Playgroud)

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

我建议:

VARABLENAME="$(command 2>&1)"
Run Code Online (Sandbox Code Playgroud)

这会将 STDOUT 和 STDERR 都保存到变量中(在您的情况下只是 STDERR,因为没有 STDOUT),因此您可以使用echo "${VARIABLENAME}".

此外,由于没有 STDOUT,您可以只将 STDERR 保存到变量中(泛化,对于任何此类程序都是如此):

VARABLENAME="$(command 2>&1 >/dev/null)"
Run Code Online (Sandbox Code Playgroud)