otazka pro bash guru

Milos Prudek prudek na bvx.cz
Pondělí Září 10 12:46:02 CEST 2007


Potrebuji sestavit napr. nasledujici prikazovy radek:

gimp-2.2 -i -b '(fuzzy-border-pattern "/home/milos/gimp/*.*" 40 
2)' '(gimp-quit 0)'

Pricemz promenne jsou tyto tri:
A = /home/milos/gimp
B = 40
C = 2

Takze symbolicky zapsano potrebuju toto:
gimp-2.2 -i -b '(fuzzy-border-pattern "A*.*" B C)' '(gimp-quit 0)'

Hlavni problem je jak zabranit shell expansion pro A. Vedlejší problém je, jak 
zapsat všechny ty dvojité a jednoduché uvozovky aby byly 
správně "iskejpované". Pro začátek jsem zapsal A přímo do skriptu, B a C se 
předávají jako parametry:

#!/bin/bash
set -f
PATTERN="/home/milos/gimp/*.*"
CMD="(fuzzy-border-pattern \"${PATTERN}\" $1 $2)"
echo "gimp-2.2 -i -b '${CMD}' '(gimp-quit 0)'"
gimp-2.2 -i -b '${CMD}' '(gimp-quit 0)'

Předposlední řádek je kontrolní, a dává správný výsledek 
gimp-2.2 -i -b '(fuzzy-border-pattern "/home/milos/gimp/*.*" 40 
2)' '(gimp-quit 0)'

A poslední řádek je zcela stejný jako předposlední. Jenže nefunguje. Poslední 
řádek určitě generuje něco jiného než předposlední. Bohužel nevím jak 
zjistit, co ten poslední řádek generuje. Jediné co vím je že poslední řádek 
musí generovat něco jiného než předposlední, protože vyvolaný program gimp 
skončí chybou, kdežto když prostě zadám výsledek předposledního řádku, 
vyvolaný program gimp funguje správně. Poradí někdo, co se to tu děje?



-- 
Milos Prudek



Další informace o konferenci Linux