Назад | Перейти на главную страницу

Перепишите sh скрипт для freebsd

У меня есть сценарий 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 ...}: неправильная подстановка.

Думаю, что баша нет, как заставить работать?

У меня нет доступа к ящику 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

Если у вас еще не установлен bash, то для FreeBSD предпочтительнее использовать порты:

cd /usr/ports/shells/bash
make install clean

Если у вас не установлено дерево портов, вы можете установить его, запустив:

portsnap fetch extract

Для выполнения любого из этих действий потребуются права root.

Также обратите внимание, что обычно bash устанавливается в / usr / local / bin / bash, поэтому вам нужно отредактировать первую строку вашего скрипта. Фактически, проверьте, что bash еще не установлен, прежде чем пытаться сделать это.