OS X에서 ~의 예기치 않은 Bash 완료


13

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

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

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

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

답변:


21

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

cd ~terdon

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

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


FreeBSD에서 시도 할 때도 마찬가지입니다.
Jenny D

그래서 나를 던진 것은 그 사용자를 위해 / home에 디렉토리가 없다는 것입니다. 실제로 많은 사람들이 / var / empty라고 말했습니다. 이러한 완성은 디스크 조회에 의한 것이라고 생각했습니다. 그래서 ~는 / etc / passwd 항목이 아닌 디스크 의 실제 홈 디렉토리 를 볼 것입니다. ~는 실제로 "사용자의 홈 디렉토리"를 의미하고 실제로 / home (또는 / User)의 바로 가기가 아니라 확장은 내 OS X 사례에서 / var / empty를 참조합니다. 새로운 것을 배웠습니다! 감사!
Walt Stoneburner

@WaltStoneburner fdo의 답변은 OSX가 다른 일을하고 있음을 나타냅니다. 어쨌든 리눅스에서 디렉토리를 생성하는 /home것은 무의미하므로 새 사용자 이름이 나열되지 않습니다. 또한 모든 사용자의 $ HOME이 /home(또는 /Users)에 있는 것은 아닙니다 .
terdon

@ terdon-나는 당신이 당신의 대답으로 그것을 못 박았다고 생각합니다. 내 Linux 계정에는 가짜 디렉토리 / 존재하지 않는 dovenull 사용자가 있으며 자동 완성에 표시되지만 예상대로 cd 명령이 실패합니다.
Walt Stoneburner

2

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

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


1

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

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.