The regular expression in the block “Code Listing 3.3” has a little bug. The line reads > emerge -C $(find ./ -name \*.ebuild |sed -e "s:.ebuild::" -e "s:./::" |awk -F'/' '{print "="$1"/"$3}') where it should read > emerge -C $(find ./ -name \*.ebuild |sed -e "s:\.ebuild::" -e "s:./::" |awk -F'/' '{print "="$1"/"$3}') Or in short: There are ebuilds that have the word "ebuild" followed by a character, in their *name*. And this thing then finds and replaces that part, instead of the last one. An even more secure version would be: > emerge -C $(find ./ -name \*.ebuild |sed -e "s:\.ebuild$::" -e "s:./::" |awk -F'/' '{print "="$1"/"$3}') And I’d recommend using that one, if it not still had the risk of parameter overload. (Meaning that there can be so many ebuilds that you have to use xargs.) So it definitely needs to change. :) Reproducible: Always Steps to Reproduce: 1. layman -a arcon 2. cd /usr/local/portage/layman/arcon 3. emerge -C $(find ./ -name \*.ebuild |sed -e "s:.ebuild::" -e "s:./::" |awk -F'/' '{print "="$1"/"$3}') Actual Results: !!! '=app-portage/update-live-ebuilds-9999.ebuild' is not a valid package atom. !!! Please check ebuild(5) for full details. Expected Results: (demerging all packages from the arcon overlay.) One thing unclear, is how to demerge only those, where an ebuild in main portage exists. Or only those where one of the same main version or full version exists.
Oops, I meant „with a character in front of“ not „followed by a character“. I also meant „unmerging“ not „demerging“. Sorry, English is not my first language, but my third. :)
Guide updated. Thanks for the updated command :]