写了一个看似简单的别名来将mp3转换为wav,但是在运行时不会扩展文件。在我无法使其正常工作后将其更改为函数。
希望能够解释为什么它没有按照书面形式发挥作用。
alias 2wav =“for fn in * .mp3; do echo \”转换$ fn \“; avconv -y -i $ fn $ {$(basename $ fn .mp3)}。wav 2> / dev / null ;完成“
答案 0 :(得分:0)
您的任何文件名是否包含空格?例如foo bar.mp3
将生成
avconv -y -i foo bar.mp3 foo bar.wav
^^^---input file, doesn't exist
^^^^^^^--output file, but since there's no input, it's useless
^^^^^^^^^^--- miscellaneous unknown/invalid arguments
您需要围绕参数引用:
alias ........ -y -i "$fn" "${$(basename .....}".wav
答案 1 :(得分:0)
解决(至少部分)。
alias 2wav =' for fn in * .mp3; do echo"转换$ {fn}&#34 ;; avconv -y -i $ {fn} $ {$(basename $ {fn } .mp3)}。wav 2> / dev / null;已完成'
不确定为什么要修复它但我用单引号括起命令并在变量周围添加括号并且它只是起作用。确实,文件名中的空格仍然是一个潜在的问题。我不得不试验一下。
答案 2 :(得分:0)
解决。
alias 2wav ='for fn in * .mp3; do echo“Converting $ {fn}”; avconv -y -i“$ {fn}”“$ {$(basename”$ {fn}“。mp3) }。“wav 2> / dev / null; done'
现在适用于包含空格的文件名。我猜测单引号会阻止扩展直到运行时发生,这就是为什么这样做的原因。
欢迎任何澄清......