Beim Schreiben eines Bash-Skripts zur Erstellung eines Polaroid-Thumbnails mithilfe von Imagicks convert
Befehl. Ich stoße auf ein Problem. Obwohl es mir gelingt, damit umzugehen (eigentlich, weil convert
flexibel genug ist), möchte ich immer noch wissen, wie ich das ohne eine solche spezifische Problemumgehung lösen kann.Bash: Leerzeichen in Variablenwert später als Parameter verwendet
Im Grunde wird das bash-Skript einen Titelwert erhalten, der Leerzeichen enthalten kann. Ich möchte diese Beschriftung als Parameter von convert
verwenden. Wenn die Beschriftung leer ist (''), verwende ich nicht die Option '-caption' für den Konvertierungsbefehl. Beispiel:
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`
Das echo echos der Wert, der kopiert werden kann, kann in ein Terminal eingefügt und ausgeführt werden. ABER die Bash läuft nicht. Wie kann ich das machen?
HINWEIS: Bei convert
, -caption ""
die Aufgabe erledigen. Ich weiß das und verwende das derzeit als Arbeit.
Vielen Dank im Voraus für hilft.
EDIT: Von der Antwort, hier ist der Code, der für mich jetzt funktioniert.
... # 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"
Ich hoffe, dass dies für diejenigen, die ähnliche Lösung suchen, nützlich sein wird.
Als eine Seite - Großbuchstaben Variablennamen sind, nach POSIX-Konvention, für Variablen mit Bedeutung für das Betriebssystem oder Shell verwendet. Ihre Skripte sollten ihre eigenen Variablen mit Namen definieren, die mindestens ein Kleinbuchstabe enthalten, um Konflikte mit diesem Namensraum zu vermeiden. Siehe http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html, wenn man bedenkt, dass das Setzen einer regulären Shell-Variablen mit einem Namen, der jede vorhandene Umgebungsvariable überlagert, die letztere überschreibt. –