Мне назвали папку ~kernel-ppa
внутри ~/Downloads
.
aditya@aditya-desktop:~$ cd Downloads/
aditya@aditya-desktop:~/Downloads$ ls
~kernel-ppa
Теперь, когда я ввожу cd ~k
и потребуйте у Tab автоматического расширения, оболочка разворачивает его до cd ~kernoops/
вместо cd ~kernel-ppa/
хотя папка с теми же начальными символами уже присутствует.
Для автоматического расширения на работу я должен выйти из него с \
. Таким образом использование cd \~k
и нажатие Tab правильно разворачивает его до cd \~kernel-ppa/
. Даже использование cd \
и нажатие Tab добивается цели.
Почему это так и почему я должен выйти? Кроме того, из чего я выхожу с тех пор даже ~
не требуется для автоматического расширения?
Если я иду с потоком и работаю cd ~kernoops/
и нажмите Enter, терминальные изменения состояния в //
:
aditya@aditya-desktop:~/Downloads$ cd ~kernoops/
aditya@aditya-desktop://$ pwd
//
aditya@aditya-desktop://$ ls
bin cdrom etc initrd.img lost+found mnt proc run srv tmp var
boot dev home lib media opt root sbin sys usr vmlinuz
aditya@aditya-desktop://$
Это похоже /
каталог, но pwd
говорит, что это //
. Что точно это?
Как Вы знаете, ~
расширяется до Вашего корневого каталога. Но то, что Вы, кажется, пропустили, является этим ~john
расширяется до корневого каталога пользователя по имени "Джон".
Проверьте Ваш /etc/passwd
файл:
% grep ker /etc/passwd
kernoops:x:107:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false
Этому назвали "пользователя системы" kernoops
(по внутренним причинам создания отчетов ошибки). Таким образом, когда Вы вводите cd ~k
Вкладка оболочка, дает предпочтение (1) расширению имени пользователя перед локальным расширением каталогов, и Вы имеете cd ~kernoops
. Теперь это заканчивается, который пользователь "kernoops" домашний dir /
, так это cd
s к нему.
В моей оболочке, zsh
, У меня нет двойной наклонной черты (2):
[:/] % cd ~kernoops/
[:/] % pwd
/
[:/] % cd //
[:/] % pwd
/
Как в стороне, не хорошо думают об этом имени каталога. Это должно будет утроить уход в сценариях и безотносительно. Единственная худшая идея я могу думать, встраивает вкладку в него...
(1) В zsh
, даже если мне назвали каталог ~xdir
и никакой пользователь, запускающийся с x
; выполнение cd ~x
Вкладка не расширяется и не заключение в кавычки ~
дает ошибку:
[:~/tmp/x] % mkdir \~xdir
[:~/tmp/x] % ls
~xdir
[:~/tmp/x] % cd ~xdir
zsh: no such user or named directory: xdir
[:~/tmp/x] 1 %
(2) Я, кажется, помню, что posix сделал исключение для начальной буквы //
в пути---это должно сохраняться, потому что некоторый старый вариант Unix (я использовал apollos с Доменом/ОС, который имел это), используемый //machine-name/...
к прямому обращению файловая система других машин в локальной сети (безопасность еще не была изобретена). Так, вероятно, колотят, прямо здесь. Если Вы делаете cd ///
у Вас будет нормальное /
в обеих оболочках, все же.
Да, найденный на unix.se!
Символ тильды (~
) имеет особое значение в оболочке. Когда это замечено в любой команде, это расширено до названия Вашего корневого каталога. Выполнение cd ~
или cd /home/aditya
то же, оно заканчивается в Вашем корневом каталоге.
Путем помещения символа обратной косой черты (\
) перед тильдой Вы говорите оболочке не делать расширение следующего специального символа (это - то, что называют Escape оболочки). Путем выполнения cd \~
Вы просите, чтобы оболочка переместилась в названный каталог ~
это было бы расположено в соответствии с каталогом, Вы делаете команду. Так выполнение cd \~kernel-ppa
изменит Вас на названный каталог ~kernel-ppa
, который является нормальным поведением.
ОТРЕДАКТИРОВАННЫЙ: больше на ~
Если Вы пишете имя пользователя своей системы после ~
, Вы перемещены в корневой каталог того пользователя. Выполнение расширения Вкладки после cd ~
расширится до имен пользователей, существующих в Вашей системе. Если делают заполнение клавишей Tab после cd ~k
, это расширяется до ~kernoops, потому что существует названный kernoops пользователя в пользователе системы с корневым каталогом /
. Как расширение cd ~k
результаты в cd ~kernoops/
с запаздывающей наклонной чертой и корневым каталогом быть /
, Вы перемещены в //
. Но это - строго то же как /
как someothers уже сказал ранее.