Несподіване завершення Bash ~ на OS X


13

Я натиснув ~TabTabна командний рядок bash і отримав несподіваний набір завершень.

Спочатку це було схоже на всіх людей у /Usersдовіднику, та багато іншого.

Тоді я подумав, що це робить зворотний пошук людей із "домашніми" каталогами /etc/password, або, можливо, тими, які були /var/empty- це здається правильним.

Мені цікаво, що насправді відбувається і чому це працює так, як це відбувається.

Відповіді:


21

У мене немає під рукою системи OSX для перевірки, але на всіх * nixes, ~fooце скорочення до домашнього каталогу користувача foo. Наприклад, ця команда переміститься в мій користувач $HOME( cd ~окремо переміститься у ваш домашній каталог):

cd ~terdon

Отже, ~і Tabрозшириться на всі можливі імена користувачів. Список має бути таким самим, як і список користувачів у /etc/passwd.

Я можу підтвердити, що саме так відбувається, коли я спробую це на своєму Debian.


Це те саме, коли я пробую це на FreeBSD.
Дженні Д

Так що мене кинуло те, що я не мав каталогів у / home для цих користувачів. Насправді багато хто сказав / var / empty. Я вважав, що такі доповнення відбуваються за допомогою пошуку диска, щоб ~ дивився на фактичний домашній каталог на диску, а не на записи / etc / passwd. Оскільки ~ насправді означає "домашній каталог користувача", а насправді не є ярликом для / home (або / User), в моєму випадку OS X посилання на розширення / var / empty. Дізналися чогось нового! Спасибі!
Уолт Стоунбернер

Відповідь @WaltStoneburner fdo нижче говорить про те, що OSX робить щось інше, я не знаю. У Linux, у будь-якому випадку, створення каталогу в /homeне має значення, це не означає, що нове ім'я користувача не буде вказано в списку. Також зауважте, що не всі користувачі $ HOME входять /home(або /Users).
тердон

@terdon - Я думаю, ти це прибив своєю відповіддю. У моєму обліковому записі Linux у мене є користувач dovenull, який має помилковий каталог / неіснуючий, він відображається в автозавершенні, але команда cd виходить з ладу (як очікувалося).
Уолт Стоунбернер

2

Я думав, що це робить зворотний пошук людей із "домашніми" каталогами в / etc / password.

В ОС X X консультується Open Directory замість / etc / passwd.


1

Посібник Баша говорить :

Bash намагається завершити обробку тексту як імені користувача (якщо текст починається з '~')

Bash використовує getpwent функцію для завершення.

man getpwent на OSX говорить:

Ці функції отримують інформацію з opendirectoryd (8), включаючи записи в /etc/master.passwd, які описані в master.passwd (5).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.