【问题标题】:Cannot store command to variable in bash [duplicate]无法将命令存储到bash中的变量[重复]
【发布时间】:2021-11-19 02:34:24
【问题描述】:

我一直在尝试编写一个程序,它将获取Sox 中的音​​量调节统计信息,并将其存储在一个变量中。

要做到这一点,你必须这样做

sox *your-audio-file* -n stat,

最后一行将显示我想要的统计数据。

但是,当我尝试将该命令的整个输出存储在变量 INITSTAT 中时,它仍然是空白的,并且应该将输出存储在变量中的代码行只是将输出打印到终端。这就是我所拥有的:

INITSTAT=`sox $audioFilePath -n stat`
echo $INITSTAT

“$audioFilePath”是我试图获取相关信息的音频文件的路径。

如果有人知道出了什么问题,我们将不胜感激。

【问题讨论】:

  • 所以sox $audioFilePath -n stat 自己按预期执行?附带说明一下,您可以将 $audioFilePath 包装为 ",以避免路径包含空格时出现问题。
  • 试试这个INITSTAT=$(sox "$audioFilePath" -n stat),让我们知道它是否有效。
  • 来自stat 上的 Sox 手册,“信息输出到‘标准错误’(stderr)流”,sox.sourceforge.net/sox.html
  • @zois 是的,sox $audioFilePath -n stat 将自行工作。我如何能够将 stderr 存储在变量中? 编辑我能够让它与INITSTAT=$((sox $audioFilePath -n stat) 2>&1)一起工作,万岁!感谢您告诉我有关 stderr 的事情。
  • @user1984 它不起作用,它具有相同的输出。我认为这是因为它们都是将命令存储在变量中的两种方式

标签: bash shell variables command sox


【解决方案1】:

我建议将标准错误重定向到标准输出:

INITSTAT=$(sox "$audioFilePath" -n stat 2>&1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 2020-07-01
    • 1970-01-01
    • 2012-04-03
    • 2015-03-10
    • 2014-10-21
    • 2012-03-02
    • 1970-01-01
    相关资源
    最近更新 更多