Я использовал Linux на и прочь в течение прошлых 15 лет, и сегодня я столкнулся с чем-то в ударе, который удивил меня.
Установите следующую структуру каталогов:
$ cd /tmp
$ mkdir /tmp/symlinktest
$ mkdir /tmp/symlinktest/dir
$ mkdir /tmp/symlinktarget
Теперь создайте две символьных ссылки в symlinktest, указывающем symlinktarget:
$ cd /tmp/symlinktest
$ ln -s ../symlinktarget Asym
$ ln -s ../symlinktarget Bsym
Теперь, в ударе, следующее заполнение клавишей Tab делает странные вещи. Введите следующее:
$ cd dir
$ cd ../A[TAB]
Нажатие клавиши Tab выше завершает строку к:
$ cd ../Asym/
поскольку я ожидал. Теперь нажмите Enter для изменения в Asym и тип:
$ cd ../B[TAB]
На этот раз нажатие клавиши Tab завершает ссылку на:
$ cd ../Bsym[space]
Обратите внимание, что существует теперь пространство после Bsym и нет никакой запаздывающей наклонной черты.
Мой вопрос, почему при изменении из физического каталога "dir" к Asym он распознает, что Asym является ссылкой на каталог, но при изменении от одной символьной ссылки до другого, он не распознает, что это - ссылка на каталог?
Кроме того, если я пытаюсь создать новый файл в Asym, я получаю сообщение об ошибке:
$ cd /tmp/symlinktest/Asym
$ cat hello > ../Bsym/file.txt
-bash: ../Bsym/file.txt: No such file or directory
Я всегда думал, что символьные ссылки были главным образом очевидны кроме для программ, которые должны управлять ими. Это нормальное поведение?
Большое спасибо,
Andy
удар cd
встроенный делает немного волшебства с ..
.
Когда Вы делаете:
cd ../Bsym
Это смотрит на $PWD
, удаляет последний компонент, добавляет компонент Bsym. Это что cd
и cd -L
сделайте, в противоположность cd -P
. Также посмотрите pwd -L
и pwd -P
.
Когда Вы делаете:
cat hello > ../Bsym/file.txt
Это волшебство не происходит. $PWD
не используется, /proc/self/cwd
используется вместо этого. cwd является inode, и.. просто родитель inode, который, оказывается, /tmp
.