Por que este script de shell não funciona?

2

Estou tentando criar um script simples que redimensionará imagens. Aqui está:

#!/bin/bash
echo "Script executed from: ${PWD}"

#copy image and resize it
OUTPUT_IMG="newimg.png"
PATH="${PWD}/${OUTPUT_IMG}"

cp "" ${OUTPUT_IMG}
mogrify -resize 400x300 ${PATH}

Estou chamando script com 1 parâmetro (imagem a ser redimensionada)

script thisImage.png

Mas recebo o erro cp command not found e mogrify command not found .

Tudo isso funciona sem um script, o que significa que eu instalei todos esses aplicativos.

Alguma idéia?

    
por ubuntico 13.01.2014 / 21:13

2 respostas

4

A variável PATH tem um significado predefinido: é o caminho de pesquisa dos programas . Quando você digita um nome de comando, o shell (ou qualquer outro programa que você diga para executar este comando) procura por um arquivo executável em um dos diretórios mencionados na variável PATH . Em seu script, cp é pesquisado em um subdiretório chamado newimg.png do diretório atual (que nem sequer existe, e muito menos contém um arquivo executável chamado cp .

Use um nome de variável diferente no seu script. Por convenção, as variáveis de ambiente que têm um significado para os programas geralmente estão em maiúsculas. Para variáveis que são locais para um script, você pode usar letras minúsculas para evitar conflitos (nomes de variáveis não fazem distinção entre maiúsculas e minúsculas). Melhor, use um nome mais significativo (porque ter variáveis que diferem apenas no caso é confuso para os humanos).

#!/bin/bash
echo "Script executed from: ${PWD}"

#copy image and resize it
output_image_name="newimg.png"
output_image_path="${PWD}/${OUTPUT_IMG}"

cp "" "$output_image_name"
mogrify -resize 400x300 "$output_image_path"

Não há razão para usar o nome do arquivo e às vezes o caminho completo aqui. Além disso, em vez de copiar o arquivo, modificando-o com mogrify , você também pode usar convert diretamente - convert é o mesmo que mogrify , exceto que ele grava em um arquivo de saída diferente.

#!/bin/bash
output_image="newimg.png"
convert -resize 400x300 "" "$output_image"
    
por Gilles 13.01.2014 / 21:21
1

PATH é uma variável de shell predefinida que contém o caminho de pesquisa para comandos. Você pode ver seu valor padrão executando echo $PATH . Como você usou em seu script, ele substituiu o caminho de pesquisa e não pôde mais encontrar nenhum comando que não fosse totalmente especificado, incluindo cp e mogrify , portanto, os dois erros.

Use uma variável diferente em vez de "PATH". Se você não tiver certeza, tente primeiro echo $YOUR_VARIABLE para ver se ele tem um valor.

    
por Marty Fried 13.01.2014 / 21:33