The OP's issue isn't bash-specific.

The behavior of test WRT symbolic links is specified in POSIX, cf.
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html

Specifically:

"With the exception of the -h pathname and -L pathname primaries, if a
pathname argument is a symbolic link, test shall evaluate the expression by
resolving the symbolic link and using the file referenced by the link."

-Jonathan Hankins

On Tue, Feb 10, 2015 at 3:25 PM, Stephane Chazelas <
stephane.chaze...@gmail.com> wrote:

> 2015-02-09 14:59:06 -0700, Bob Proulx:
> [...]
> > The idea is that symlinks should be completely transparent and
> > invisible to most applications.  The idea is that when normal things
> > are run they don't realize they are using a symlink.  Behavior would
> > be exactly the same as if it were a regular file system link.  That is
> > what is happening in your test case.  The symlink references an
> > existing file, is a regular file and exists, therefore the status is
> > true.
> [...]
>
> Note the discrepancy with "find" though.
>
> With find, -type f will not match on symlinks to regular files
> (unless you also use -L/-follow).
>
> If you actually want to find regular files after resolving
> symlinks, without resolving symlinks when walking down the
> directory tree, that's where it becomes cumbersome.
>
> POSIXly, you have to resort to the test command:
>
> find . -exec test -f {} \; -print
>
> With GNU find, you can use -xtype:
>
> find . -xtype f
>
> GNU find's -printf still doesn't give information on the target
> of  the symlink.
>
> --
> Stephane
>
>


-- 
------------------------------------------------------------------------
Jonathan Hankins    Homewood City Schools

The simplest thought, like the concept of the number one,
has an elaborate logical underpinning. - Carl Sagan

jhank...@homewood.k12.al.us
------------------------------------------------------------------------

Reply via email to