Как заставить BASH использовать команду «подстановочный знак»?

Я создал сценарий bash для автоматизации редактирования данных EXIF ​​в файлах изображений. Я не могу понять, как заставить скрипт выдавать команду с подстановочным знаком * (звездочкой) для указания шаблона имени файла.

Скрипт правильно собирает команду CLI, которая выполняется правильно, если я ввожу ее вручную вне сценария bash. Но изнутри bash скрипт возвращает ошибку, не найденную файлом.

Вот мой код:

#!/bin/bash

# Usage: Place this script in the directory of jpg files whose EXIF data is to be edited.

echo Press enter to accept default values.

# Enter camera manufacturer.
default="Pentax"
read -p "Enter camera manufacturer [$default]: " cameramake
cameramake=${cameramake:-$default}
exifargs="-model=$cameramake"

# Enter camera model.
default="K1000"
read -p "Enter camera model [$default]: " cameramodel
cameramodel=${cameramodel:-$default}
exifargs="$exifargs -make=$cameramodel"

# Enter slide film type.
default="Kodachrome slide film."
read -p "Enter slide film type [$default]: " filmtype
filmtype=${filmtype:-$default}
exifargs="$exifargs -imagedescription='PIE PS-5000 slide scanner. VueScanner 32 scanning softare. $filmtype'"

# Enter file name pattern.
default="*.jpg"
read -p "Enter file name pattern [$default]: " namepattern
namepattern=${namepattern:-$default}
exifargs="$exifargs $default"

#Use exiftool to edit EXIF data
echo /home/richard/Dropbox/Pictures/Tools/ExifTool/exiftool "$exifargs"
/home/richard/Dropbox/Pictures/Tools/ExifTool/exiftool "$exifargs"

Я вставил команду «echo», чтобы проверить, что моя команда верна. Это (при аренде CLI). Результаты запуска скрипта:

richard@richard-laptop:~/Dropbox/Pictures/Photos/test$ sh exifbatch.sh
Press enter to accept default values.
Enter camera manufacturer [Pentax]: 
Enter camera model [K1000]: 
Enter slide film type [Kodachrome slide film.]: 
Enter file name pattern [*.jpg]: 
/home/richard/Dropbox/Pictures/Tools/ExifTool/exiftool -model=Pentax -make=K1000 -imagedescription='PIE PS-5000 slide scanner. VueScanner 32 scanning softare. Kodachrome slide film.' *.jpg
No file specified

Но когда я ввожу тот же самый текст, что и созданный скриптом в командной строке, он функционирует так, как я хочу, находя файлы в текущем каталоге, которые соответствует шаблону имени. (Предупреждения, выданные exiftool, ожидаются.):

richard@richard-laptop:~/Dropbox/Pictures/Photos/test$ /home/richard/Dropbox/Pictures/Tools/ExifTool/exiftool -model=Pentax -make=K1000 -imagedescription='PIE PS-5000 slide scanner. VueScanner 32 scanning softare. Kodachrome slide film.' *.jpg
Warning: [minor] Ignored empty rdf:Seq list for darktable:mask_id - 1987_California-01.jpg
Warning: [minor] Ignored empty rdf:Seq list for darktable:mask_id - 1987_California-02.jpg
2 image files updated

Как мне изменить мой скрипт basch так, чтобы команда выполнялась так же, как и в CLI? Я думаю, что что-то не так с тем, как я использую символ *. Если я не ставил кавычки (") вокруг имени переменной $ exifargs, bash немедленно интерпретирует * .jpg и добавляет все имена файлов в строку, что затем смешивает команду exiftool.

Спасибо !

1
задан 24 October 2016 в 00:12

0 ответов

Другие вопросы по тегам:

Похожие вопросы: