Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

When linking a directory to root, I get this error:

$ ln -s ~/inbox/ /
$ ln: //: Is a directory

Bash autocompletes the directory path by adding a /. I've tried escaping without success.

$ ln -s ~/inbox /

works though. Why is this?

share|improve this question
2  
What you wrote cannot work, I think you have to add more detail to your question. Also, are you working as root? Also, what exact OS are you on? –  jippie May 9 '12 at 18:25
    
What OS is this? Is it GNU Coreutils, or the BSD utils? –  jsbillings May 9 '12 at 19:46
    
I don't think it's coreutils. My version puts the file name in quotes, e.g. ln: 'foo': hard link not allowed for directory. –  Mikel May 9 '12 at 20:43
add comment

2 Answers

up vote 4 down vote accepted

In pathname resolution, having a trailing / is equivalent to a trailing /. — in other words, ~/inbox/ is equivalent to ~/inbox/. in this context. So the ln command is trying to create a link called . in the root directory (and, unsurprisingly, failing).

Zsh removes the trailing / when you press Space after completing a directory (unless configured not to do so). I don't know if bash can be made to do this.

share|improve this answer
    
Very interesting. Pathname resolution also says that symlinks should be resolved. But when you do ln symlink blah, blah should point to symlink, not what symlink points at. –  Mikel May 10 '12 at 4:16
add comment

Is that exactly what you ran?

Is a directory looks like your OS printing the EISDIR error, which could happen two ways:

Trying to overwrite an existing symlink that points to a directory.

$ cd $(mktemp -d)
$ mkdir dir
$ ln -s dir dir    # this creates dir/dir
$ ln -s dir dir    # this fails, because dir/dir already exists
ln: failed to create symbolic link `dir/dir': File exists

Trying to create a hard link to a directory.

$ cd $(mktemp -d)
$ mkdir dir
$ ln dir dirlink
ln: `dir': hard link not allowed for directory

If it is what you were running, what does type ln or alias ln print?

share|improve this answer
    
I think it is good to explain what cd $(mktemp -d) does. Not everybody is familiar with this construction. –  jippie May 9 '12 at 21:07
1  
It creates a new directory somewhere under /tmp. It makes sure that the files I'm using in my examples don't already exist so that everyone can get try running the commands and get the same results. –  Mikel May 9 '12 at 21:18
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.