OS X에서 ~의 예기치 않은 Bash 완료 bash는 명령과 완성의

나는 누르면 ~TabTab프롬프트 bash는 명령과 완성의 예상치 못한 세트를 얻었다.

먼저 /Users디렉토리 에있는 모든 사람들과 같았습니다 .

그런 다음에 “홈”디렉토리 /etc/password또는 아마도 그 디렉토리가있는 사람들의 역방향 조회를 수행하고 있다고 생각 /var/empty했습니다.

내가 궁금한 점은 실제로 진행되고있는 이유이것이 작동하는 이유 입니다.



답변

확인하기 편리한 OSX 시스템은 없지만 모든 * nixes에서 ~foouser의 홈 디렉토리에 대한 축약 형입니다 foo. 예를 들어,이 명령은 내 사용자로 이동합니다 $HOME( cd ~혼자서만 홈 디렉토리로 이동).

cd ~terdon

그래서, ~그리고 Tab모든 가능한 사용자 이름에 확장됩니다. 이 목록은의 사용자 목록과 같아야합니다 /etc/passwd.

나는 이것이 데비안에서 이것을 시도 할 때 정확히 일어난다는 것을 확인할 수 있습니다.


답변

나는 그것이 / etc / password에 “home”디렉토리를 가진 사람들의 역방향 조회를하고 있다고 생각했다.

OS X에서 / etc / passwd 대신 Open Directory가 참조됩니다.


답변

Bash Reference Manual 다음과 같이 말합니다 .

Bash는 텍스트를 사용자 이름으로 처리를 완료하려고 시도합니다 (텍스트가 ‘~’로 시작하는 경우)

Bash getpwent 완성 기능을 사용 합니다.

man getpwent OSX에서는 다음과 같이 말합니다.

이 함수는 master.passwd (5)에 설명 된 /etc/master.passwd의 레코드를 포함하여 opendirectoryd (8)에서 정보를 얻습니다.