Como evito a expansão quando uso um padrão como argumento para um script?

2

Eu preciso de um script muito simples que faça isso:

mogrify -resize $1x$2^ -gravity center -crop $1x$2+0+0 $3

para que eu possa chamar assim:

cropresize.sh 110 110 *.png

o problema é que o shell expande o padrão *.png em vez de passá-lo para o script.

Como posso conseguir isso (script, alias ou qualquer outra solução equivalente está bem)?

    
por Matteo Riva 03.03.2011 / 15:06

2 respostas

7

Como o shell executa a expansão glob antes dos argumentos serem entregues ao comando, não há como pensar de forma transparente: ele é controlado pelo usuário (citar o parâmetro) ou força bruta (desabilitar completamente o globbing). para o seu shell com set -o noglob ).

Você está vendo o problema do lado errado. Altere seu script para aceitar vários argumentos de nome de arquivo:

x=$1
y=$2
shift 2
mogrify -resize ${x}x${y}^ -gravity center -crop ${x}x${y}+0+0 "$@"
    
por 03.03.2011 / 15:39
1

Você já tentou

cropresize.sh 110 110 \*.png

Mas eu posso ver apenas o zsh (não o bash) expandindo-o como você diz.

    
por 03.03.2011 / 15:30