2014-01-10 91 views
0

寫了一個看似簡單的別名,將mp3轉換爲wav,但不會在運行時擴展文件。在我無法工作後將其更改爲功能。如何正確擴展zsh別名中的文件名

希望能解釋爲什麼它沒有按照書面的方式工作。

別名2wav = 「用於* .MP3 FN;做回聲\」 轉換$ FN \「; avconv -y -i $ FN $ {$(基名$ FN .MP3)} WAV 2>/dev/null; done「

回答

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 
0

解決(至少部分)。

alias 2wav ='for fn in * .mp3; do echo「Converting $ {fn}」; avconv -y -i $ {fn} $ {$(basename $ {fn} .mp3)} .wav 2 >/dev/null; done'

不知道爲什麼這個固定它,但我用單引號括住了命令,並在變量中添加了大括號,並且它工作正常。確實文件名中的空格仍然是潛在的問題。我必須試驗一下。

0

已解決。

alias 2wav ='for fn in * .mp3; do echo「Converting $ {fn}」; avconv -y -i「$ {fn}」「$ {$(basename」$ {fn}「.mp3 )}「.wav 2>/dev/null; done'

現在適用於包含空格的文件名。我猜測單引號會阻止擴展發生,直到運行時,這就是爲什麼這個工程。

歡迎澄清...