为 freebsd 重写 sh 脚本

为 freebsd 重写 sh 脚本

我有一个 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

相关内容