Shell - 变量分配输出失败,VOLUME="$(sox $1 -n stat -v)"?
Shell - variable assign output failed with VOLUME="$(sox $1 -n stat -v)"?
我想用 SoX 批处理一堆 wav 文件(以调整它们的音量)。我在分配 sox file.wav -n stat -v
的 Volume Adjustment
输出时遇到问题。我试过这个:
我发现网上有很多关于这个操作的例子,但是这些例子不像data=$(data)
那么复杂。我试过 VOLUME_ADJUST="$(sox -n stat -v)"
但输出到我的终端的结果没有分配给变量。当我回应它时,没有任何显示。
感谢您的建议。
我的代码如下:
#!/bin/sh
RED='3[0;31m'
NC='3[0m'
BLUE='3[0;34m'
GREEN='3[0;32m'
Process () {
printf "Process with ${RED}${NC}\n";
printf "Volume up as high as possible?[y/n]";
read PASS;
if test "$PASS" = "y"; then
a="$(date)"
VOLUME="$(sox "" -n stat -v)"
#echo $VOLUME
# eval "sox -v $VOLUME_ADJUST "
#printf $?
elif test "$PASS" = "n"; then
printf "${GREEN}Volume up skipped.${NC}"
fi
}
Process "test.wav"
这是我的理解。
出于某种原因,sox 在 stderr 而不是 stdout 中打印数据。当我们从像 var=$(date)
这样的命令中获取值时,来自 stdout 的消息被分配给变量,但来自 stderr 的消息不会被分配给。为了获取值,很容易将 stderr 重定向到 stdout:只需在命令后添加 2>&1
即可。此外,我们可以将 stdout 定向到 stderr,例如 var=$(date 1>&2)
打印的结果,如果我们回显它,$var
中什么也没有。
我想用 SoX 批处理一堆 wav 文件(以调整它们的音量)。我在分配 sox file.wav -n stat -v
的 Volume Adjustment
输出时遇到问题。我试过这个:
我发现网上有很多关于这个操作的例子,但是这些例子不像data=$(data)
那么复杂。我试过 VOLUME_ADJUST="$(sox -n stat -v)"
但输出到我的终端的结果没有分配给变量。当我回应它时,没有任何显示。
感谢您的建议。 我的代码如下:
#!/bin/sh
RED='3[0;31m'
NC='3[0m'
BLUE='3[0;34m'
GREEN='3[0;32m'
Process () {
printf "Process with ${RED}${NC}\n";
printf "Volume up as high as possible?[y/n]";
read PASS;
if test "$PASS" = "y"; then
a="$(date)"
VOLUME="$(sox "" -n stat -v)"
#echo $VOLUME
# eval "sox -v $VOLUME_ADJUST "
#printf $?
elif test "$PASS" = "n"; then
printf "${GREEN}Volume up skipped.${NC}"
fi
}
Process "test.wav"
这是我的理解。
出于某种原因,sox 在 stderr 而不是 stdout 中打印数据。当我们从像 var=$(date)
这样的命令中获取值时,来自 stdout 的消息被分配给变量,但来自 stderr 的消息不会被分配给。为了获取值,很容易将 stderr 重定向到 stdout:只需在命令后添加 2>&1
即可。此外,我们可以将 stdout 定向到 stderr,例如 var=$(date 1>&2)
打印的结果,如果我们回显它,$var
中什么也没有。