Al escribir una secuencia de comandos bash para ayudar a crear una miniatura de Polaroid con el comando convert
de Imagick. Encuentro un problema Aunque me las arreglé para evitar esto (en realidad, porque convert
es lo suficientemente flexible), igual quiero saber cómo solucionarlo sin esa solución específica.Bash: espacio en valor variable utilizado más tarde como parámetro
Así que, básicamente, el script bash obtendrá un valor de título que puede contener espacio. Quiero usar ese título como parámetro de convert
. Si el título está vacío (''), no usaré la opción '-caption' para el comando de conversión. De esta manera:
CAPTION="Is this Cute?" # The actual value will be tacked from the parameter of this bash.
IN_FILE="resources/puppy.png"
OUTFILE="resources/puppy_polaroid.png"
# If CAPTION is not empty, reformat CAPTION
if [ "$CAPTION" != "" ]; then CAPTION="-caption \"$CAPTION\""; fi
# otherwise, do not use '-caption' add all
COMMAND="convert $CAPTION \"$IN_FILE\" \"$OUTFILE\""
echo "Command: $COMMAND" #This echo a value command
`$COMMAND`
El eco repite el comando de valor que se puede copiar puede pegar en un terminal y ejecutarse. PERO el bash no se ejecuta. ¿Como puedo hacer esto?
NOTA: En caso de convert
, -caption ""
haga el trabajo. Sé esto y actualmente lo uso como una solución.
Gracias de antemano por su ayuda.
EDIT: De la respuesta, aquí está el código que funciona para mí ahora.
... # Get CAPTION and GRAVITY from parameters
if [ "$CAPTION" != "" ]; then ARGS_CAPTION=(-caption "$CAPTION"); fi
if [ "$GRAVITY" != "" ]; then ARGS_GRAVITY=(-gravity "$GRAVITY"); fi
if [ ! -f "$IN_FILE" ]; then echo "The input file does not exist: '$IN_FILE'"; exit; fi
if [ "$OUTFILE" == "" ]; then OUTFILE=${IN_FILE%.*}-${IN_FILE#*.}-polaroid.png; fi
ARGS=("${ARGS_CAPTION[@]}" -thumbnail 480x480 -border 5x5 -pointsize 60 "${ARGS_GRAVITY[@]}" +polaroid -thumbnail 120x120)
echo convert "${ARGS[@]}" "$IN_FILE" "$OUTFILE";
convert "${ARGS[@]}" "$IN_FILE" "$OUTFILE"
Espero que esto sea útil para aquellos que buscan una solución similar.
Como un lado, todos los nombres de variables de mayúsculas son, por convención POSIX, utilizados para variables con significado para el sistema operativo o shell. Sus scripts deben definir sus propias variables con nombres que contengan al menos un carácter en minúsculas para evitar conflictos con este espacio de nombres. Consulte http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html, teniendo en cuenta que establecer una variable de shell regular con un nombre que se superpone a cualquier variable de entorno existente sobrescribirá la última. –