2017-02-08 2 views
0

SoXで一括してwavファイルを処理したい(ボリュームを調整する)。私はsox file.wav -n stat -vからの出力をVolume Adjustmentに割り当てることに問題があります。私はこれで試しました:

この操作についてはウェブ上に多くの例がありますが、これらの例はdata=$(data)のように複雑ではありません。私はVOLUME_ADJUST="$(sox $1 -n stat -v)"を試しましたが、私の端末に出力された結果は変数に割り当てられません。私がそれをエコーすると、何も表示されません。

お寄せいただきありがとうございます。次のように 私のコードは次のとおりです。ここで

#!/bin/sh 

RED='\033[0;31m' 
NC='\033[0m' 
BLUE='\033[0;34m' 
GREEN='\033[0;32m' 

Process() { 
    printf "Process with ${RED}$1${NC}\n"; 
    printf "Volume up as high as possible?[y/n]"; 
    read PASS; 
    if test "$PASS" = "y"; then 
     a="$(date)" 
     VOLUME="$(sox "$1" -n stat -v)" 
     #echo $VOLUME 
     # eval "sox -v $VOLUME_ADJUST $1 $1" 
     #printf $? 
    elif test "$PASS" = "n"; then 
     printf "${GREEN}Volume up skipped.${NC}" 
    fi 
} 

Process "test.wav" 

Here is a pastebin to all of my code

+1

私は 'sox'は出力を標準出力ではなく標準エラーに出力するでしょう。これは重複している可能性がありますが、今は空白を描いています。この解決策については、例えば、 http://stackoverflow.com/questions/962255/how-to-store-standard-error-in-a-variable-in-a-bash-script – tripleee

+0

@tripleeeありがとう! 'VOLUME = $({sox $ 1 -n stat -v;} 2> &1);'は正常に動作します –

+0

1つのコマンドに中括弧は必要ありません – tripleee

答えて

0

は私の理解です。

soxはstderrではデータを印刷しますが、stdoutでは印刷しません。 var=$(date)のようなコマンドから値を取得すると、stdoutからのメッセージが変数に割り当てられますが、stderrからのメッセージは割り当てられません。値を取得するには、stderrをstdoutにリダイレクトするのは簡単です。コマンドの後ろに2>&1を追加するだけです。追加でstderrをstderrに向けることができます。var=$(date 1>&2)のように結果が出力され、$varが返されます。

関連する問題