|
| ImageMagick/Bash - double quotes forsvinde~ Fra : Lars Stokholm |
Dato : 29-08-10 20:26 |
|
Jeg er ved at lave et script, men er stødt i et (tilbagevendende)
problem. Jeg kan koge det ned til dette:
LABEL="foo bar"
COMB="-background pink -fill blue label:\"$LABEL\""
convert $COMB test.png
Jeg får denne fejlmeddelelse:
convert: unable to open image `bar"': @ error/blob.c/OpenBlob/2514.
convert: no decode delegate for this image format `bar"' @
error/constitute.c/ReadImage/532.
Det svarer til at ImageMagick får kommandoen:
convert -background pink -fill blue label:foo bar test.png
Jeg har tjekket med et echo foran convert i scriptet foroven, men output
er som jeg forventede (nemlig med doublequotes):
convert -background pink -fill blue label:"foo bar" test.png
Hvis jeg kører denne kommando, så virker det fint. Det virker ret
mærkeligt og jeg er i tvivl om hvorvidt det er Bash eller convert der
fjerner mine double quotes.
Jeg har ikke mulighed for at gøre scriptet mere simpelt.
| |
(Thorbjørn Ravn (29-08-2010)
| Kommentar Fra : (Thorbjørn Ravn |
Dato : 29-08-10 20:44 |
|
Lars Stokholm <lars.stokholm@gmail.com> writes:
> COMB="-background pink -fill blue label:\"$LABEL\""
Så overlever gåseøjnene ind i COMB, som du også har set.
Det du har brug for er formentlig at også få to backslashes med ind i
COMB.
Prøv med
label:\\\"$LABEL\\\""
--
Thorbjørn Ravn Andersen "... plus... Tubular Bells!"
| |
Martin Larsen (29-08-2010)
| Kommentar Fra : Martin Larsen |
Dato : 29-08-10 20:58 |
|
Lars Stokholm wrote:
> LABEL="foo bar"
> COMB="-background pink -fill blue label:\"$LABEL\""
> convert $COMB test.png
Prøv at veksle mellem enkelt- og dobbelapostroffer, fx:
LABEL="foo bar"
COMB="-background pink -fill blue label:'$LABEL'"
convert $COMB test.png
| |
Lars Stokholm (29-08-2010)
| Kommentar Fra : Lars Stokholm |
Dato : 29-08-10 21:41 |
|
Thorbjørn Ravn Andersen, 20100829 wrote:
> Det du har brug for er formentlig at også få to backslashes med ind i
> COMB.
>
> Prøv med
>
> label:\\\"$LABEL\\\""
Det virker heller ikke. Jeg har prøvet før og nu igen.
| |
Lars Stokholm (29-08-2010)
| Kommentar Fra : Lars Stokholm |
Dato : 29-08-10 21:42 |
|
Martin Larsen wrote:
> Prøv at veksle mellem enkelt- og dobbelapostroffer, fx:
>
> LABEL="foo bar"
> COMB="-background pink -fill blue label:'$LABEL'"
> convert $COMB test.png
Det har jeg desværre også prøvet - til jeg blev helt blå i hovedet. Jeg
har brugt mindt en time på at sidde og rodde med det.
| |
Martin Larsen (29-08-2010)
| Kommentar Fra : Martin Larsen |
Dato : 29-08-10 22:53 |
|
Lars Stokholm wrote:
> Det har jeg desværre også prøvet - til jeg blev helt blå i hovedet. Jeg
> har brugt mindt en time på at sidde og rodde med det.
Får du kun fejlen når der er mellemrum i LABEL?
I så fald kunne du prøve
LABEL="foo\ bar"
| |
Benny Amorsen (29-08-2010)
| Kommentar Fra : Benny Amorsen |
Dato : 29-08-10 22:15 |
|
Lars Stokholm <lars.stokholm@gmail.com> writes:
> Jeg er ved at lave et script, men er stødt i et (tilbagevendende)
> problem. Jeg kan koge det ned til dette:
>
> LABEL="foo bar"
> COMB="-background pink -fill blue label:\"$LABEL\""
> convert $COMB test.png
>
> Jeg får denne fejlmeddelelse:
>
> convert: unable to open image `bar"': @ error/blob.c/OpenBlob/2514.
> convert: no decode delegate for this image format `bar"' @
> error/constitute.c/ReadImage/532.
>
> Det svarer til at ImageMagick får kommandoen:
>
> convert -background pink -fill blue label:foo bar test.png
Nej, det svarer til at ImageMagic får kommandoen
convert -background pink -fill blue label:"foo bar" test.png
hvor shell'en ikke har fjernet anførselstegn. Det vil ikke virke, for så
leder convert efter en fil ved navn bar" (og en label ved navn "foo er
også lidt suspekt).
> Jeg har tjekket med et echo foran convert i scriptet foroven, men output
> er som jeg forventede (nemlig med doublequotes):
>
> convert -background pink -fill blue label:"foo bar" test.png
>
> Hvis jeg kører denne kommando, så virker det fint. Det virker ret
> mærkeligt og jeg er i tvivl om hvorvidt det er Bash eller convert der
> fjerner mine double quotes.
Jeg kan ikke komme på en metode til at gøre det du ønsker. En variabel,
der indeholder en værdi med mellemrum, kan enten blive opfattet som kun
1 værdi, og så får du:
convert: unrecognized option `-background pink -fill blue label:foo bar' @ convert.c/ConvertImageCommand/802.
Eller du kan lade din shell opdele efter mellemrum, men så opdeler den
efter alle mellemrum.
I perl er det relativt let, f.eks. ved at lade COMB være et array i
stedet for en streng, eller ved kreativ brug af split. Det burde faktisk
også kunne gøres med arrays i bash, men når jeg når til arrays skifter
jeg altid til perl.
/Benny
| |
Lars Stokholm (30-08-2010)
| Kommentar Fra : Lars Stokholm |
Dato : 30-08-10 06:28 |
|
Martin Larsen wrote:
> Får du kun fejlen når der er mellemrum i LABEL?
>
> I så fald kunne du prøve
>
> LABEL="foo\ bar"
Det har jeg desværre også prøvet.
| |
Martin Larsen (30-08-2010)
| Kommentar Fra : Martin Larsen |
Dato : 30-08-10 07:49 |
|
Dette virker i al fald på min PC:
LABEL="foo bar"
COMB="-background pink -fill blue label:\"$LABEL\""
sh -c "convert $COMB test.png"
| |
Lars Stokholm (30-08-2010)
| Kommentar Fra : Lars Stokholm |
Dato : 30-08-10 06:31 |
|
Benny Amorsen wrote:
>> Det svarer til at ImageMagick får kommandoen:
>>
>> convert -background pink -fill blue label:foo bar test.png
>
> Nej, det svarer til at ImageMagic får kommandoen
> convert -background pink -fill blue label:"foo bar" test.png
> hvor shell'en ikke har fjernet anførselstegn. Det vil ikke virke, for så
> leder convert efter en fil ved navn bar" (og en label ved navn "foo er
> også lidt suspekt).
Hvorfor vil det ikke virke? Det er måske slet ikke meningen at convert
skal se anførselstegnene? - er det for Bash's skyld at de er der?
> I perl er det relativt let, f.eks. ved at lade COMB være et array i
> stedet for en streng, eller ved kreativ brug af split. Det burde faktisk
> også kunne gøres med arrays i bash, men når jeg når til arrays skifter
> jeg altid til perl.
Altså LABEL=( foo bar ) ?
| |
Klaus Alexander Seis~ (30-08-2010)
| Kommentar Fra : Klaus Alexander Seis~ |
Dato : 30-08-10 06:37 |
|
Lars Stokholm skrev:
> LABEL="foo bar"
> COMB="-background pink -fill blue label:\"$LABEL\""
> convert $COMB test.png
Fungerer det mon med
LABEL="foo bar"
COMB=$(eval echo '-background pink -fill blue label:\"$LABEL\"')
convert "$COMB" test.png
?
Mvh,
--
Klaus Alexander Seistrup
http://klaus.seistrup.dk/
| |
Lars Stokholm (30-08-2010)
| Kommentar Fra : Lars Stokholm |
Dato : 30-08-10 06:46 |
|
Klaus Alexander Seistrup wrote:
> Fungerer det mon med
>
> LABEL="foo bar"
> COMB=$(eval echo '-background pink -fill blue label:\"$LABEL\"')
> convert "$COMB" test.png
Desværre ikke:
convert: unrecognized option `-background pink -fill blue label:"foo
bar"' @ error/convert.c/ConvertImageCommand/815.
| |
(Thorbjørn Ravn (30-08-2010)
| Kommentar Fra : (Thorbjørn Ravn |
Dato : 30-08-10 07:57 |
|
Lars Stokholm <lars.stokholm@gmail.com> writes:
> convert: unrecognized option `-background pink -fill blue label:"foo
> bar"' @ error/convert.c/ConvertImageCommand/815.
Du får sendt hele strengen fra -background til bar som ET argument. Det
er _DET_ der er dit problem.
--
Thorbjørn Ravn Andersen "... plus... Tubular Bells!"
| |
Lars Stokholm (30-08-2010)
| Kommentar Fra : Lars Stokholm |
Dato : 30-08-10 14:12 |
|
Martin Larsen wrote:
> Dette virker i al fald på min PC:
>
> LABEL="foo bar"
> COMB="-background pink -fill blue label:\"$LABEL\""
> sh -c "convert $COMB test.png"
Woohoo! Det ledte mig da i den rigtige retning. Jeg synes dog dette er
lidt kønnere:
eval convert $COMB test.png
Men mange tak!
| |
Benny Amorsen (30-08-2010)
| Kommentar Fra : Benny Amorsen |
Dato : 30-08-10 19:26 |
|
Lars Stokholm <lars.stokholm@gmail.com> writes:
> Hvorfor vil det ikke virke? Det er måske slet ikke meningen at convert
> skal se anførselstegnene? - er det for Bash's skyld at de er der?
Korrekt. convert må ikke se dem, convert parser ikke kommandolinjen men
æder bare hvad bash giver den. Der er kun nogle enkelte Unix-kommandoer,
der laver parsing af anførselstegn osv., og convert er ikke en af dem.
/Benny
| |
Lars Stokholm (30-08-2010)
| Kommentar Fra : Lars Stokholm |
Dato : 30-08-10 19:47 |
|
Benny Amorsen wrote:
> Korrekt. convert må ikke se dem, convert parser ikke kommandolinjen men
> æder bare hvad bash giver den. Der er kun nogle enkelte Unix-kommandoer,
> der laver parsing af anførselstegn osv., og convert er ikke en af dem.
Så lærte man også det. :) Jeg havde en uudtalt forståelse af, at en
kommando bare åd alt hvad der stod bag den. Men i det lys kan jeg godt
se at shell expansion ville være det rene magi.
| |
Kent Friis (30-08-2010)
| Kommentar Fra : Kent Friis |
Dato : 30-08-10 19:59 |
|
Den Mon, 30 Aug 2010 20:46:56 +0200 skrev Lars Stokholm:
> Benny Amorsen wrote:
>> Korrekt. convert må ikke se dem, convert parser ikke kommandolinjen men
>> æder bare hvad bash giver den. Der er kun nogle enkelte Unix-kommandoer,
>> der laver parsing af anførselstegn osv., og convert er ikke en af dem.
>
> Så lærte man også det. :) Jeg havde en uudtalt forståelse af, at en
> kommando bare åd alt hvad der stod bag den. Men i det lys kan jeg godt
> se at shell expansion ville være det rene magi.
I *nix er det shell'en der håndterer quotes, wildcards, osv. Derfor
virker det med alle programmer.
I MS-DOS og efterfølgere, er det det enkelte programs opgave. Derfor
virker fx "type *.txt" ikke. Type kan nemlig ikke håndtere wildcards.
Mvh
Kent
--
"The Brothers are History"
| |
|
|