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