我有一个 sh 脚本:
#!/bin/bash
fullpath="$1"
filename="${fullpath##*/}"
dir="${fullpath:0:${#fullpath} - ${#filename}}"
base="${filename%.[^.]*}"
ext="${filename:${#base} + 1}"
if [ -f $fullpath ]; then
if [ $ext != "mp4" ]; then
ffmpeg -threads 4 -i $fullpath -y -vcodec libx264 -g 100 -bt 100k mp4 -vpre fast -acodec libfaac -ab 128k "$dir$base.mp4"
mv -f "$dir$base.mp4" "/data/www/rfpl/htdocs/videotapes/$base.mp4"
fi
fi
因此,我为 Linux 编写了它,现在我需要在 FreeBSD 下运行它,但我对 FreeBSD 一无所知。出现错误:
./convert.sh: ${fullpath:0...}:错误替换。
我认为没有 bash,我该如何让它工作?
答案1
如果你还没有安装 bash,那么 FreeBSD 首选的方式是使用 ports:
cd /usr/ports/shells/bash 使安装干净
如果你没有安装 ports 树,你可以运行以下命令来安装:
portsnap 获取提取
执行任何一项操作都需要 root 权限。
还要注意,bash 通常安装在 /usr/local/bin/bash 中,因此您需要编辑脚本的第一行。在尝试上述操作之前,请检查 bash 是否尚未安装。
答案2
我无法访问 freebsd 盒子,但是可以尝试这个:
#!/bin/bash
fullpath="$1"
filename=$(basename $fullpath)
dir=$(dirname $fullpath)
ext=$(echo $filename | awk -F. '{ print $NF }')
base=$(echo $filename | sed "s/.${ext}//")
if [ -f $fullpath ]; then
if [ $ext != "mp4" ]; then
ffmpeg -threads 4 -i $fullpath -y -vcodec libx264 -g 100 -bt 100k mp4 -vpre fast -acodec libfaac -ab 128k "$dir/$base.mp4"
mv -f "$dir/$base.mp4" "/data/www/rfpl/htdocs/videotapes/$base.mp4"
fi
fi