Portál AbcLinuxu, 13. února 2026 16:46
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
fi
Dí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.patch
Jenž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.patch
tak to vymění správně, ale jakmile to zapíšu do skriptu, zase to samý.
Achjo. Nevíte co s tím?
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
Takže to je ebuild.
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:
evalsedu doplnit o přiřazení a includovatsedem
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.