ln: posixly confused

Nate Eldredge neldredge at math.ucsd.edu
Tue Mar 3 10:32:03 PST 2009


On Tue, 3 Mar 2009, Andriy Gapon wrote:

>
> Test case.
> Preparation:
> $ mkdir linktest
> $ cd linktest
> $ mkdir some_dir
> $ mkdir other_dir
> The test:
> $ ln -s some_dir the_link
> $ ln -s -f other_dir the_link
>
> Expected: the_link points to other_dir.
> Actual result: some_dir contains symlink other_dir -> other_dir.
>
>> From ln(1):
> SYNOPSIS
>     ln [-s [-F]] [-f | -iw] [-hnv] source_file [target_file]
>     ln [-s [-F]] [-f | -iw] [-hnv] source_file ... target_dir
>
> I thought that only true directory would trigger the second form.
> I thought that the second argument being a symlink (to a file or to a directory)
> should trigger the first form.
>
> I also read this:
> http://www.opengroup.org/onlinepubs/009695399/utilities/ln.html
>
> I think that the text there (and in ln(1)) implies what I expected, but this is
> not spelled out clearly.

FWIW, Linux and Solaris have the same behavior as FreeBSD.

The standard says the second form is triggered if the second argument 
"names an existing directory".  An informative note in the symlink() 
specification at 
http://www.opengroup.org/onlinepubs/009695399/functions/symlink.html says 
"a symbolic link allows a file to have multiple logical names". 
Therefore, I think it's a fair interpretation to say that a symbolic link 
to an existing directory "names" it.

-- 

Nate Eldredge
neldredge at math.ucsd.edu


More information about the freebsd-hackers mailing list