Я пытаюсь создать простой скрипт, который будет изменять размеры изображений. Вот оно:
#!/bin/bash
echo "Script executed from: ${PWD}"
#copy image and resize it
OUTPUT_IMG="newimg.png"
PATH="${PWD}/${OUTPUT_IMG}"
cp "$1" ${OUTPUT_IMG}
mogrify -resize 400x300 ${PATH}
Я звоню сценарию с 1 параметром (размер изображения будет изменен)
script thisImage.png
Но я получаю ошибки cp command not found
и mogrify command not found
.
Все это работает без сценария, означающего, что я установил все эти приложения.
Есть идеи?
Переменная PATH
имеет предопределенное значение: это путь поиска для программ . Когда вы вводите имя команды, оболочка (или любая другая программа, которую вы указываете для выполнения этой команды) ищет исполняемый файл в одном из каталогов, упомянутых в переменной PATH
. В вашем скрипте поиск cp
выполняется в подкаталоге с именем newimg.png
текущего каталога (который даже не существует, не говоря уже о том, чтобы содержать исполняемый файл с именем cp
.
Использовать другое имя переменной в вашем скрипте. По соглашению переменные среды, которые имеют значение для программ, обычно пишутся в верхнем регистре. Для переменных, которые являются локальными для скрипта, вы можете использовать строчные буквы, чтобы избежать столкновений (имена переменных не чувствительны к регистру). Лучше использовать более значимое имя (потому что наличие переменных, которые отличаются только регистром, сбивает с толку людей).
#!/bin/bash
echo "Script executed from: ${PWD}"
#copy image and resize it
output_image_name="newimg.png"
output_image_path="${PWD}/${OUTPUT_IMG}"
cp "$1" "$output_image_name"
mogrify -resize 400x300 "$output_image_path"
Хотя нет причин иногда использовать имя файла и иногда полный путь. Более того, вместо копирования затем файл, модифицируя его на месте с помощью mogrify
, вы можете также использовать convert
напрямую - convert
такой же, как mogrify
, за исключением того, что он записывает в другой выходной файл.
#!/bin/bash
output_image="newimg.png"
convert -resize 400x300 "$1" "$output_image"
PATH
- это предопределенная переменная оболочки, которая содержит путь поиска команд. Вы можете увидеть его значение по умолчанию, выполнив echo $PATH
. Поскольку вы использовали его в своем сценарии, он переписал путь поиска и больше не мог находить команды, которые не указаны полностью, включая cp
и mogrify
, то есть две ошибки.
Используйте другую переменную вместо «PATH». Если вы не уверены, вы можете сначала попробовать echo $YOUR_VARIABLE
, чтобы увидеть, имеет ли оно значение.