Portál AbcLinuxu, 10. května 2025 02:14
Ahoj. Doufám, že jsem napsal výstižně titulek. :) Hodím jsem jen nejpodstatnější info ohledně skriptu, kterej píšu a na závěr řeknu problém.
FIX=`echo hal \ # jmeno-baliku je $1, ale to jen aby bylo jasno, dal jsem příklad balík hal | sed -e 's/=//g' \ -e 's/\[[[digit:]].*\]//' \ -e 's/-[[:digit:]].*$//'` CP=`emerge -p --nodeps $FIX \ | grep 'ebuild ' \ | tail -n 2 \ | head -n 1 \ | sed -e 's/\[ebuild.......\]\ //' \ -e 's/ //g'` CPN=`echo $CP \ | sed -e 's/\[[[digit:]].*\]//' \ -e 's/-[[:digit:]].*$//'` PN=`echo $CPN | cut -d/ -f2` GP="http://gentoo-portage.com" wget -qc $GP/$CPN HTTP="$GP`sed -n 's/.*href="\([^"]\+\).*/\1/gp' $PN | grep ebuild | head -n 1`" P=`echo $HTTP | sed 's/%2F/\//g' | cut -d/ -f6` EBUILD="/usr/portage/$CPN/$P" rm -f $PN 2> /dev/null if [ "`grep epatch echoBUILD`" != "" ] then # a taky přichází problém for F in `grep epatch echoBUILD | sed -n 's/.*"\([^"]\+\).*/\1/gp' | sed 's/${FILESDIR}//g'` do PATCH="/usr/portage/$CPN/files${F}" echo $PATCH # další, zatím nepodstatný příkazy done fiDíky tomu to na mě vysype
/usr/portage/sys-apps/hal/files/${P}-RBC.patch /usr/portage/sys-apps/hal/files/${PN}-0.5.1-old_storage_policy.patchJenže já tam ty proměnný uvedený mám a on je nevymění! Až když debuguju po jednom řádku v terminálu, tak zjistím, že když pak ještě řeknu:
echo /usr/portage/sys-apps/hal/files/${P}-RBC.patch echo /usr/portage/sys-apps/hal/files/${PN}-0.5.1-old_storage_policy.patchtak to vymění správně, ale jakmile to zapíšu do skriptu, zase to samý.
PS: Pokud vás zajímá, co je zač ten skript, vydržte, protože když s ním nebudou další problémy budu o něm informovat v blogu.
echoBUILD
? Ne každý zná Gentoo tak detailně, aby si to dokázal z hlavy představit.
Jinak místo
if [ "`grep epatch echoBUILD`" != "" ]; thenje jednodušší (a efektivnější)
if grep -q epatch echoBUILD; then
F
je sice něco, co sice obsahuje znaky '$
', ale ty už se samozřejmě znovu neexpandují, jinak byste mohl shell triviálně poslat do nekonečné smyčky a nebylo by možné jako výsledek expanze dostat nic, co obsahuje '$
'. Napadají mne tři možnosti:
eval
sed
u doplnit o přiřazení a includovatsed
em
P
a PN
, přikláněl bych se ke třetí variantě. První dvě jsou tak trochu "o hubu".
... | sed "s/\${P}/${P}/g"
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.