OS X에서 Bash가 예기치 않게 완료됩니다 ~

OS X에서 Bash가 예기치 않게 완료됩니다 ~

~TabTabbash 명령 프롬프트를 쳤는데 예상치 못한 완료 결과가 나왔습니다.

첫째, 디렉토리에 있는 모든 사람 /Users과 그 이상처럼 보입니다.

그런 다음 나는 "홈" 디렉토리를 가진 사람 /etc/password또는 아마도 그 사람을 역방향 조회하고 있다고 생각했습니다 /var/empty. 이는 올바른 것 같습니다.

제가 궁금한 점은진짜지속적이고이것은 작동하는 것처럼 작동합니다.

답변1

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

cd ~terdon

따라서 가능한 모든 사용자 이름으로 확장됩니다 ~. Tab이 목록은 의 사용자 목록과 동일해야 합니다 /etc/passwd.

데비안에서 시도해 보면 이런 일이 발생한다는 것을 확인할 수 있습니다.

답변2

내 생각엔 /etc/password에 "home" 디렉터리가 있는 사람을 역방향으로 조회하는 것 같습니다.

OS X에서는 /etc/passwd 대신 열린 디렉토리가 쿼리됩니다.

답변3

배쉬 참조 매뉴얼설명하다:

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

불다사용 getpwent완료하는 기능입니다.

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

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

관련 정보