代码之家  ›  专栏  ›  技术社区  ›  Benny

CentOS-将每个WAV文件转换为MP3/OGG

  •  1
  • Benny  · 技术社区  · 15 年前

    我正在尝试构建一个脚本(我对linux脚本非常陌生),但我似乎不明白为什么我不能运行这个脚本。如果我保留标题(#/bin/sh)在中,我得到以下信息:

    -bash: /tmp/ConvertAndUpdate.sh: /bin/sh^M: bad interpreter: No such file or directory
    

    'tmp/ConvertAndUpdate.sh: line 2: syntax error near unexpected token `do
    'tmp/ConvertAndUpdate.sh: line 2: `do
    

    有什么想法吗?以下是完整的脚本:

    #!/bin/sh
    for file in *.wav; do
        mp3=$(basename .$file. .wav).mp3;
        #echo $mp3
        nice lame -b 16 -m m -q 9 .resample 8 .$file. .$mp3.;
        touch .reference .$file. .$mp3.;
        chown apache.apache .$mp3.;
        chmod 600 .$mp3.;
        rm -f .$file.;
        mv .$file. /converted;
        sql="UPDATE recordings SET IsReady=1 WHERE Filename='${file%.*}'"
        echo $sql | mysql --user=me --password=pasword Recordings
        #echo $sql
    done
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   Michael Aaron Safyan    15 年前

    你可能真的有一个非打印字符在那里。您可能在Windows上以“\r\n”行结尾而不是常规的UNIX“\n”结尾保存了此文件。使用dos2unix来修复它。还有,一些事情。。。。

    您似乎没有引用“$file”或任何其他变量。。。因此,如果任何文件名中都没有空格,脚本可能会工作,但如果有空格,脚本肯定会崩溃。无论何时使用一个变量,确保它被正确引用是非常重要的。

    有几个不同的口译员。如果你使用 /bin/sh /bin/bash #! /bin/bash 除非我真的需要瞄准 /垃圾箱/垃圾箱 .

    我修复了shell脚本的一部分,如下所示:

    #! /bin/bash
    for file in *.wav; do
        filebasename=`basename "$file" .wav`
        filemp3="$filebasename.mp3"
        nice lame -b 16 -m m -q 9 --resample 8 "$file" "$filemp3"
        #....
    done
    

        2
  •  0
  •   ndim    15 年前

    显然,您保存文件时使用了CRLF行结尾,而不是正确的LF行结尾。这个 ^M 是赠品。

    将文件更改为LF行尾。