tech-pkg archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkgsrc littering the home directory



    Date:        Tue, 05 Feb 2008 03:32:57 +0100
    From:        Roland Illig <rillig%NetBSD.org@localhost>
    Message-ID:  <47A7CAD9.4010605%NetBSD.org@localhost>

  | I think checking that the output of "ls -A" is empty is more portable.

When did -A get to be a truly portable ls flag?   I have no idea if
it is posix required or not, but it is certainly a "recent" edition
to ls (by at least wasn't there in 5th, 6tth, or 7th edition unix,
wasn't there in 3bsd 4bsd to at least 4.2 (not sure about 4.3, but
probably not there either)).

If you want truly portable you'd need
        ls -a | sed -e '/^\.$/d' -e '/^\.\.$/d' -e 3q

and test the out from that for empty - that at least goes back
to the introduction of sed (7th edn).   This has the advantage
that we don't really need the directory listing, and if the
diretory is big, all we really nead is to know something is
there, the "3q" sed expression will abort the ls fairly
quickly, and avoid too much data through the pipe, or into
the shell (just testing "ls -A" for empty, on a huge
directory, makes the shell collect perhaps megabytes of
data, for the sole purpose of testing that there's more
than 0 bytes...)

If you want portability to even earlier than that then
        ls -a | wc -l
and test the output of that for > 2 (test `...` -gt 2).  That should
go back further than anyone cares (and still work everywhere, at
least everywhere that has a test command) but shunts the entire
directory listing through the pipe, always.

kre

ps: I agree using test -s on a directory is not the right way,
in many implementations that is guaranteed true (size of a
directory is always > 0 bytes.)



Home | Main Index | Thread Index | Old Index