我正在尝试创建一个脚本,使用grive工具将我的计算机与谷歌驱动器同步。我想将grive
命令的输出存储到 bash 变量,但我似乎无法让它工作。
一些谷歌搜索告诉我,可以使用以下语法将命令输出保存到变量中:
VARABLENAME=$(command)
并且输出可以稍后打印
echo ${VARIABLENAME}
然而,grive 命令似乎是一个例外,因为当我使用这种语法时,它仍然在终端中打印输出并且变量的内容是空的。
如何将 的输出grive
正确存储在变量中?
问题是grive
命令输出到错误流 STDERR(文件描述符 2),它通常用于传递错误消息,而 STDOUT(文件描述符 1)用于显示任何程序的实际(成功时)输出(严格来说)请讲)。
我没有使用过grive
,但根据您的话,开发人员可能仅使用 STDERR 来显示来自命令的任何消息。
现在您使用的命令替换:
VARABLENAME=$(command)
Run Code Online (Sandbox Code Playgroud)
将保存到的 STDOUT,command
而VARABLENAME
不是 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)