Created attachment 346728 [details] build.log The bash construct while EXP;do job;done< <(file) fails when there is nothing in /dev/fd. A possible workaround is: ln -s /proc/self/fd /dev/fd Alternatively (imho preferably), one could avoid the <(file) construct. I think this is an important bug because AFAIK, while bash is part of gentoo, it never required udev as part of a functional building system. Surely someone has spotted this before? Maybe no one cares enough to fix it (do comment)? It's possible to circumvent the issue in bash with something like: IFS='$' for i in $(IFS=' '; find ${dirlist} -name '*.la' -type f);do files+=( "$i" ) done instead of while read -r line do files+=( "$line" ) done< <( find ${dirlist} -name '*.la' -type f ) The above example is from /usr/bin/lafilefixer[148-151] of dev-util/lafilefixer, which is where i imagine this bug originated.
Created attachment 346730 [details] emerge --info
Why is there nothing in /dev/?
The /dev/fd/ directory should be available on any modern unix-like system. A quick google search turned up this link which has some info about it: http://www.informit.com/articles/article.aspx?p=99706&seqNum=15 (In reply to comment #0) > The bash construct while EXP;do job;done< <(file) fails when there is > nothing in /dev/fd. I'd say that it's fair for bash to assume that /dev/fd/ exists. So, if your chosen device manager (or lack thereof) doesn't create the /dev/fd -> /proc/self/fd symlink for you, then I'd suggest that you create an init script to do it for you.
yes, /dev/fd should be a symlink to /proc/self/fd and your dev-manager should be setting that up. that means udev or mdev or something else. if you've disabled all of those, then you're on the hook for providing those symlinks in /dev.
> I'd say that it's fair for bash to assume that /dev/fd/ exists. So, if your chosen device manager (or lack thereof) doesn't create the /dev/fd > if you've disabled all of those, then you're on the hook for providing those symlinks in /dev. I have wrongly assumed that sys-fs/static-dev would take care of all my needs. Looking at the ebuild for it, I see that it does nothing to check or create that file. Perhaps it would be appropriate to notify the user about their responsibility to maintain a valid /dev/fd folder or symlink. Along with any other features from udev that the build system relies on. I see that the recent stage3 tarball has this file, which must be the reason why static-udev assumes there is no need to check for it. It's probably not correct of me to expect that a system can be installed in 2008, virtually left alone for five years and then upgraded almost automatically. Actually, one of the reasons I cherish and keep using Gentoo is exactly because long-term upgrades are painless compared to the process of upgrading a binary distro with such long intervals in between. They usually leave the system in a broken state and "helping" them manually is a lot more complicated than on Gentoo. Anyway, I humbly suggest that static-dev checks for and provides any and all features of /dev that the build system relies on.
(In reply to comment #5) that's because MAKEDEV creates these things for you as part of the 'generic' target. seems to work just fine for me: $ mkdir foo $ cd foo $ sudo MAKEDEV -d $PWD generic $ find -type l ./mixer0 ./dsp0 ./audio0 ./ttyUB1 ./ttyUB0 ./stderr ./stdout ./stdin ./fd
I see. Thank you for clarifying.