У меня есть сценарий 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 еще не установлен, прежде чем пытаться сделать это.