Как построить правильную командную строку в Bash? Цитируя вопросы, я думаю


1

У меня вопрос очень новичка, я уверен. Я пытаюсь создать сценарий для редактирования внутренних временных меток EXIF ​​ряда файлов фотографий JPG, используя утилиту командной строки exiftool. Моя настоящая проблема заключается в создании командной строки.

Мне нужно, чтобы команда, выполняемая скриптом, выглядела следующим образом:

exiftool -overwrite_original_in_place -DateTimeOriginal="2015:12:29 08:00:00" filename.jpg

Соответствующая часть моего сценария:

# compute timestamp
TIMESTAMP="2015:12:29 `printf %02d $HOUR`:`printf %02d $MIN`:`printf %02d $SEC`"
# Set options string for exiftool
EXOPTION='-overwrite_original_in_place -DateTimeOriginal="'$TIMESTAMP'"'
# Execute exiftool on the current file
exiftool $EXOPTION $f

Тем не менее, опция set -x в моем скрипте показывает, что выполняется

exiftool -overwrite_original_in_place '-DateTimeOriginal="2015:12:29' '08:00:00"' filename.jpg

В опцию DateTimeOriginal вставляются дополнительные символы одинарных кавычек , и я не понимаю, почему и как.

Заранее благодарим за любую оказанную помощь.

JGB


1
Используя двойные кавычки , а не одиночные кавычки (и избежать двойных кавычек вы нужны ) , является шагом в правильном направлении.
Томас Дики

1
Ответ на эту проблему подробно описан здесь: mywiki.wooledge.org/BashFAQ/050 - краткий ответ: вы не можете сделать это с умным цитированием, вы должны использовать массивы bash.
Гленн Джекман

Я согласен с Томасом Дики. Подстановка и расширение строк не происходит в строках с одинарными кавычками. Вместо этого вам может понадобиться что-то вроде этого: EXOPTION = "- overwrite_original_in_place -DateTimeOriginal = \" $ TIMESTAMP \ ""
Роб Шумлаковски,

Ответы:


0

Вы не должны бояться того, что показывает set -x. Он просто указывает, где по-своему находятся границы слов и пробелы, но это не то, чем будет ваша команда при вызове.

Тем не менее, вам следует подумать о том, чтобы написать свои выражения немного проще для ясности. Например:

TIMESTAMP=`printf '2015:12:29 %02d:%02d:%02d' $HOUR $MIN $SEC`
EXOPTION="-overwrite_original_in_place -DateTimeOriginal=\"$TIMESTAMP\""
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.