Итак, я писал этот маленький скрипт наутилуса для перекодирования видео в mp3:
#! /bin/bash -x
if [ -z "$1" ]
then
zenity --warning --text="Error - No file selected !"
exit 1
fi
BASEFILENAME=${1%.*}
exec ffmpeg -i "$1" -ab 256k "$BASEFILENAME.mp3" &&
if [ "$?" -eq 0 ]
then
zenity --info --text="Converting successful"
exit
fi
Проблема в том, что хотя команда ffmpeg выполнена успешно, if [ "$?" -eq 0 ]
Кажется, не срабатывает. Это почему? Это &&
неправильно или это что-то еще?
&&
после ffmpeg это на самом деле работает. У меня все еще есть еще один вопрос, если это нормально в этом месте - есть ли способ где-то отобразить stdout и stderr ffmpeg без использования окна терминала? Как в zenity Fe$()
конструкции в переменную, а затем передать эту переменнуюzenity
. Следите за цитирование, иzenity
в моем опыте использует PanGo так что вам нужно заменить<
,&
,>
с<
,&
,>
соответственно.exec command
Оператор заменяет текущую оболочку сcommand
. То есть ваш сценарий фактически заканчивается строкойexec ffmpeg ...
; остальные строки будут выполнены, если и только еслиffmpeg
команда не найдена в вашем PATH (или она не может быть запущена по другим причинам).Вы можете получить более подробную информацию о
exec
встроенном bash, набравhelp exec
в командной строке bash:источник
В соответствии с этим
exec
оболочка заменяется указанной вами командой. Таким образом, ваш сценарий никогда не попадает в команды послеexec
.Вам не нужно
exec
. Просто укажите команду.источник
Вы можете сохранить
exec
команду, если поместите ее в подоболочку:источник
&&
все не так?exec
?