Bash

如何將此腳本轉換為別名(MacOS、ZSH)

  • December 22, 2021

此腳本在直接輸入控制台時可以正常工作:

N | find . -type f -iname "*.aac" -exec bash -c 'FILE="$1"; ffmpeg -i "${FILE}" -acodec libmp3lame "${FILE%.aac}.mp3";' _ '{}' \;

但是當我試圖將它作為別名添加到我的~/.zshrc文件中時:

alias aac-to-mp3="N | find . -type f -iname \"*.aac\" -exec bash -c 'FILE=\"$1\"; ffmpeg -i \"${FILE}\" -acodec libmp3lame \"${FILE%.aac}.mp3\";' _ '{}' \;"

它產生:

✔  aac-to-mp3
_: N: command not found
ffmpeg version 4.4.1 Copyright (c) 2000-2021 the FFmpeg developers
 built with Apple clang version 13.0.0 (clang-1300.0.29.3)
 configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4.1_3 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-avresample --enable-videotoolbox
 libavutil      56. 70.100 / 56. 70.100
 libavcodec     58.134.100 / 58.134.100
 libavformat    58. 76.100 / 58. 76.100
 libavdevice    58. 13.100 / 58. 13.100
 libavfilter     7.110.100 /  7.110.100
 libavresample   4.  0.  0 /  4.  0.  0
 libswscale      5.  9.100 /  5.  9.100
 libswresample   3.  9.100 /  3.  9.100
 libpostproc    55.  9.100 / 55.  9.100
: No such file or directory

我嘗試將其N |移入命令本身:

alias aac-to-mp3="find . -type f -iname \"*.aac\" -exec bash -c 'FILE=\"$1\"; N | ffmpeg -i \"${FILE}\" -acodec libmp3lame \"${FILE%.aac}.mp3\";' _ '{}' \;"

但它會產生相同的輸出。

我確實在每次別名更改之間重新啟動了 shell。

如何使該腳本可用作別名?我不明白這個問題。

別名不能帶參數。你需要一個函式來代替。此外,請避免使用 CAPS 作為 shell 變數名。按照慣例,全域環境變數是大寫的,因此對您自己的變數名使用大寫字母可能會導致意外錯誤。嘗試將此添加到您的~/.zshrc文件中:

aac-to-mp3(){
   find . -type f -iname "*.aac" -exec \
       bash -c 'file="$1"; ffmpeg -n -i "$file" -acodec libmp3lame "${file%.aac}.mp3";' _ '{}' \;
}

ffmpeg 的-n選項將響應N任何提示,因此您無需嘗試傳遞N給它(這是N |嘗試做的事情,儘管方式不起作用)。

引用自:https://unix.stackexchange.com/questions/683486