ไม่คาดคิด Bash เสร็จสิ้นของ ~ บน OS X


13

ฉันกด~TabTabบนคำสั่ง bash และได้รับชุดของความสำเร็จที่ไม่คาดคิด

ครั้งแรกมันดูเหมือนว่าทุกคนใน/Usersไดเรกทอรีและอีกมากมาย

จากนั้นฉันคิดว่ามันกำลังทำการค้นหาแบบย้อนกลับของคนที่มีไดเรกทอรี "home" ใน/etc/passwordหรืออาจจะเป็นคนที่/var/empty- สิ่งนี้ดูเหมือนถูกต้อง

สิ่งที่ฉันอยากรู้คือสิ่งที่เกิดขึ้นจริงและทำไมมันใช้งานได้

คำตอบ:


21

ฉันไม่ได้มีระบบ OSX ที่มีประโยชน์ในการตรวจสอบ แต่ใน nixes * ทั้งหมดเป็นชวเลขไดเรกทอรีบ้านของผู้ใช้~foo fooตัวอย่างเช่นคำสั่งนี้จะย้ายไปที่ผู้ใช้ของฉัน$HOME( cd ~เพียงอย่างเดียวจะย้ายไปยังไดเรกทอรีบ้านของคุณ):

cd ~terdon

ดังนั้น~และTabจะขยายไปยังชื่อผู้ใช้ที่เป็นไปได้ทั้งหมด /etc/passwdรายการนี้ควรเป็นเช่นเดียวกับรายชื่อของผู้ใช้ใน

ฉันสามารถยืนยันได้ว่าเป็นสิ่งที่เกิดขึ้นเมื่อฉันลองใช้ Debian ของฉัน


มันเหมือนกันเมื่อฉันลองใช้ FreeBSD
เจนนี่ D

ดังนั้นสิ่งที่ทำให้ฉันเป็นคือฉันไม่มีไดเรกทอรีใน / home สำหรับผู้ใช้เหล่านั้น ในความเป็นจริงหลายคนพูด / var / ว่างเปล่า ฉันคิดว่าความสำเร็จดังกล่าวเกิดจากการค้นหาดิสก์ดังนั้น ~ จะค้นหาโฮมไดเร็กตอรี่จริงบนดิสก์ไม่ใช่รายการ / etc / passwd เนื่องจาก ~ หมายถึงจริงๆ "ไดเรกทอรีบ้านของผู้ใช้" และไม่ใช่ทางลัดสำหรับ / home (หรือ / ผู้ใช้) การอ้างอิงส่วนขยาย / var / ว่างในกรณี OS X ของฉัน เรียนรู้สิ่งใหม่! ขอบคุณ!
Walt Stoneburner

@WaltStoneburner คำตอบของ fdo ด้านล่างชี้ให้เห็นว่า OSX กำลังทำสิ่งที่แตกต่างฉันไม่รู้ บน Linux อย่างไรก็ตามการสร้างไดเรกทอรีใน/homeนั้นไม่เกี่ยวข้องซึ่งจะไม่แสดงชื่อผู้ใช้ใหม่ นอกจากนี้โปรดทราบว่าไม่ใช่ $ HOME ของผู้ใช้ทั้งหมดที่อยู่ใน/home(หรือ/Users)
terdon

@terdon - ฉันคิดว่าคุณจับมันด้วยคำตอบของคุณ ในบัญชี Linux ของฉันฉันมีผู้ใช้ dovenull ที่มีไดเรกทอรีปลอมของ / ไม่มีอยู่มันจะปรากฏในการเติมข้อความอัตโนมัติ แต่คำสั่ง cd ล้มเหลว (ตามที่คาดไว้)
Walt Stoneburner

2

ฉันคิดว่ามันกำลังทำการค้นหาแบบย้อนกลับของคนที่มีไดเรกทอรี "home" ใน / etc / password

ใน OS X Open Directory จะได้รับการพิจารณาแทน / etc / passwd


1

คู่มืออ้างอิง Bash บอกว่า :

Bash พยายามทำข้อความให้เป็นชื่อผู้ใช้ (ถ้าข้อความขึ้นต้นด้วย '~')

Bash ใช้ getpwentฟังก์ชันเพื่อทำให้สำเร็จ

man getpwent บน OSX พูดว่า:

ฟังก์ชั่นเหล่านี้ได้รับข้อมูลจาก opendirectoryd (8) รวมถึงบันทึกใน /etc/master.passwd ซึ่งอธิบายไว้ใน master.passwd (5)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.