У меня есть простой скрипт, который собирает вводимые пользователем данные, а затем собирает командную строку поиска для обработки группы файлов. Я пробовал заменить несколько переменных в строке, но безрезультатно.
Вот код:
PRESET = "High Profile"
X264TUNE = "Film"
if [ -z "$1" ] ; then
TRANSCODEDIR = "."
else
TRANSCODEDIR = "$1"
fi
find "$TRANSCODEDIR"/* -type f -exec bash -c '/usr/bin/HandBrakeCLI -i "$1" -o "${1%\.*}".mp4 -x264-preset = "$PRESET" x264-tune = "$X264TUNE" --encoder = "x264"' __ {} \;
Кажется, я не могу заставить замену переменных работать в выполняемой команде поиска. Я пробовал комбинации одинарных и двойных кавычек, но безрезультатно. Любая помощь приветствуется.
Процесс bash, работающий под управлением find, не наследует переменные в сценарии. Вам нужно будет либо экспортировать переменные (export FOO=bar, а не просто FOO=bar), либо передать их напрямую команде find. (FOO=bar find ...)
Спасибо @iscfrc. Вот и все. Очевидно, что переменные недоступны в области, в которой выполняется команда find. Их экспорт сработал как шарм. Спасибо.
Другой подход - использовать цикл while read и выполнять всю обработку внутри цикла и избегать части export, хотя это не так важно.





Выглядит правильно. Попробуйте
bash -x -c '...', чтобы увидеть, что показывает дополнительная трассировка.