Почему делает CD ~k (и вкладка) расширяется до CD ~kernoops, когда я уже папка назвал “~kernel-ppa” в pwd?

Мне назвали папку ~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 говорит, что это //. Что точно это?

8
задан 2 April 2014 в 17:30

2 ответа

Как Вы знаете, ~ расширяется до Вашего корневого каталога. Но то, что Вы, кажется, пропустили, является этим ~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 /, так это cds к нему.

В моей оболочке, 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!

10
ответ дан 16 November 2019 в 16:48

Символ тильды (~) имеет особое значение в оболочке. Когда это замечено в любой команде, это расширено до названия Вашего корневого каталога. Выполнение cd ~ или cd /home/aditya то же, оно заканчивается в Вашем корневом каталоге.

Путем помещения символа обратной косой черты (\) перед тильдой Вы говорите оболочке не делать расширение следующего специального символа (это - то, что называют Escape оболочки). Путем выполнения cd \~ Вы просите, чтобы оболочка переместилась в названный каталог ~ это было бы расположено в соответствии с каталогом, Вы делаете команду. Так выполнение cd \~kernel-ppa изменит Вас на названный каталог ~kernel-ppa, который является нормальным поведением.

ОТРЕДАКТИРОВАННЫЙ: больше на ~

Если Вы пишете имя пользователя своей системы после ~, Вы перемещены в корневой каталог того пользователя. Выполнение расширения Вкладки после cd ~ расширится до имен пользователей, существующих в Вашей системе. Если делают заполнение клавишей Tab после cd ~k, это расширяется до ~kernoops, потому что существует названный kernoops пользователя в пользователе системы с корневым каталогом /. Как расширение cd ~k результаты в cd ~kernoops/ с запаздывающей наклонной чертой и корневым каталогом быть /, Вы перемещены в //. Но это - строго то же как / как someothers уже сказал ранее.

7
ответ дан 16 November 2019 в 16:48

Другие вопросы по тегам:

Похожие вопросы: