Linux

為freebsd重寫sh腳本

  • April 23, 2016

我有一個 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,我怎樣才能讓它工作?

如果您還沒有安裝 bash,那麼 FreeBSD 的首選方法是使用埠:

cd /usr/ports/shells/bash
使安裝乾淨

如果您沒有安裝埠樹,您可以通過執行來安裝它:

portsnap 提取提取物

做這些事情中的任何一個都需要root privs。

另請注意,通常 bash 安裝在 /usr/local/bin/bash 中,因此您需要編輯腳本的第一行。實際上,在嘗試上述操作之前,請檢查是否尚未安裝 bash。

我無法訪問 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

引用自:https://serverfault.com/questions/272237