Почему этот сценарий оболочки не работает?

Я пытаюсь создать простой скрипт, который будет изменять размеры изображений. Вот оно:

#!/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.

Все это работает без сценария, означающего, что я установил все эти приложения.

Есть идеи?

2
задан 14 January 2014 в 00:13

2 ответа

Переменная 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"
0
ответ дан 14 January 2014 в 00:13

PATH - это предопределенная переменная оболочки, которая содержит путь поиска команд. Вы можете увидеть его значение по умолчанию, выполнив echo $PATH. Поскольку вы использовали его в своем сценарии, он переписал путь поиска и больше не мог находить команды, которые не указаны полностью, включая cp и mogrify, то есть две ошибки.

Используйте другую переменную вместо «PATH». Если вы не уверены, вы можете сначала попробовать echo $YOUR_VARIABLE, чтобы увидеть, имеет ли оно значение.

0
ответ дан 14 January 2014 в 00:13

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

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