-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Thursday, December 6 at 11:40 AM, quoth Paul Hoffman: >> chmod a-w dir/new >> if [ `find dir -type f` ] ; then > > You have to do something like this instead: > > found=`find dir -type f` > if -n "$found" ; then > > At least on my system (Mac OS X 10.3 = Darwin 7.9.0), where find(1) > exits with status 0 even if nothing is found.
That's why I used the form that I used. Consider what I said; I said if [ `find dir -type f` ] ; then I did not say: if find dir -type f ; then The reason is because the former relies on the output of find, and the latter relies on the exit status of find. In other words, I had already addressed this issue. At worst, some shells might require that to be rewritten like this: if [ "$( find dir -type f )" ] ; then The reason for that is that [ (also known as /bin/test, and frequently a builtin shell command) returns true if it has any arguments of any non-zero length, and returns false if it does not (i.e. the -n argument is the default behavior). My example is equivalent to this: found=`find dir -type f` if [ "$found" ] ; then ...but does not require the extraneous variable definition. Your alternative suggestion: if -n "$found" ; then will, unfortunately, not work in many situations because in many POSIX shells (including bash), "-n" is not a valid argument to the "if" keyword, nor is "-n" a recognized executable program or command. Perhaps in your system you have a /bin/-n program, but most folks don't. ~Kyle - -- Many who claim to have been transformed by Christ's love are deeply, even murderously, intolerant of criticism. -- Sam Harris -----BEGIN PGP SIGNATURE----- Comment: Thank you for using encryption! iD8DBQFHWDXJBkIOoMqOI14RAj1CAJsETNaVb1dj9M9kNyvsy1tKjcHD2QCfRZVu +DLO3JgxGFwm5u70aTy7BU4= =Xgwv -----END PGP SIGNATURE-----