OS X'te ~ beklenmeyen Bash tamamlaması


13

Ben preslenmiş ~TabTabistemi bash komuta ve tamamlama beklenmedik setini aldı.

İlk olarak /Usersdizindeki tüm millet gibi görünüyordu ve çok daha fazlası.

Sonra bunun "ev" dizinleri olan /etc/password, ya da belki de olanlar ile ters arama yaptığını düşündüm /var/empty- bu doğru görünüyor.

Merak ettiğim şey gerçekten olup bitenler ve bunun neden olduğu gibi çalıştığı.

Yanıtlar:


21

Ben kontrol etmek için kullanışlı bir OSX sistemi yok ama tüm * nixes, ~fookullanıcının giriş dizini için bir kısayol foo. Örneğin, bu komut kullanıcıma $HOME( cd ~tek başına ana dizininize taşınır):

cd ~terdon

Yani, ~ve Tabtüm olası kullanıcı adlarına genişleyecektir. Liste, içindeki kullanıcıların listesiyle aynı olmalıdır /etc/passwd.

Bunu Debian'ımda denediğimde tam olarak ne olduğunu doğrulayabilirim.


FreeBSD'de denediğimde de aynı şey geçerli.
Jenny D

Beni atmış olan şey, bu kullanıcılar için / home dizinlerim olmamasıydı. Aslında, birçok / var / boş dedi. Ben böyle tamamlamalar disk arama tarafından olduğunu, böylece ~ / etc / passwd girişleri yerine disk üzerindeki gerçek ana dizini bakarak olacağını düşündüm . ~ Gerçekten "bir kullanıcının ana dizini" anlamına geldiğinden ve / home (veya / User) için bir kısayol olmadığı için, OS X durumumda genişletme / var / empty'a başvurur. Yeni bir şey öğrendim! Teşekkürler!
Walt Stoneburner

@WaltStoneburner fdo'nun aşağıdaki cevabı OSX'in farklı bir şey yaptığını gösteriyor, bilmiyorum. Her neyse, Linux'ta /homeyeni bir kullanıcı adı listelenmeyecek bir dizin oluşturmak önemsizdir. Ayrıca, tüm kullanıcıların $ HOME'larının /home(veya /Users) içinde olmadığını unutmayın .
terdon

@terdon - Sanırım cevabını çivirdin. Linux hesabımda / varolmayan bir sahte dizini olan bir dovenull kullanıcısı var, otomatik tamamlamada görünüyor, ancak cd komutu başarısız oluyor (beklendiği gibi).
Walt Stoneburner

2

Ben / etc / password "ev" dizinleri ile millet ters arama yaptığını düşündüm.

OS X'te / etc / passwd yerine Open Directory'ye başvurulur.


1

Bash Referans Kılavuzu şunları söylüyor :

Bash, metni kullanıcı adı olarak işlemeyi tamamlamaya çalışır (metin '~' ile başlıyorsa)

Bash işlevi tamamlama için kullanır getpwent .

man getpwent OSX'te diyor ki:

Bu işlevler, master.passwd (5) 'de açıklanan /etc/master.passwd içindeki kayıtlar da dahil olmak üzere opendirectoryd (8)' den bilgi alır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.