| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | 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"
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |