/bin/ls vs .dotted files
Andrey N. Oktyabrski
ano at bestmx.ru
Thu Sep 13 21:21:29 PDT 2012
On 09/14/2012 04:41 AM, Matthew Dillon wrote:
> I can't think of a good reason why f_listdot is set for root
> automatically,
>
> It goes all the way back to the original import in 2003 when we forked
> from FreeBSD.
>
> FreeBSD still turns it on automatically but added a -I option that
> turns it off.
>
> /* Root is -A automatically unless -I. */
> if (!f_listdot && getuid() == (uid_t)0 && !f_noautodot)
> f_listdot = 1;
"-I" option has a different explication in the GNU ls:
-I, --ignore=PATTERN
do not list implied entries matching shell PATTERN
So this is one more incompatibility.
> At the very least I will bring in this change. But it may well be
> that we should also change the default to NOT be -A for root.
Yes, it is one true solution.
There is one more solution which I have seen in Solaris. Many commands
are environment-sensitive.
For example, we can have the CMD_BEHAVIOR environment variable, which
can have values "POSIX" (or "POSIX:1812.321"), "BSD", "LINUX",
"SOLARIS", ...
So we can use these conditions:
if $CMD_BEHAVIOR is unset or $CMD_BEHAVIOR == "" then CMD_BEHAVIOR=POSIX
if $CMD_BEHAVIOR == POSIX then f_listdot = 0
if $CMD_BEHAVIOR == BSD and UID == 0 then f_listdot = 1
In this case I can change a command behavior in my shell scripts, and my
scripts can be OS-independent.
More information about the Users
mailing list