bash เสร็จสิ้นในเทอร์มินัล - ไฟล์เทียบกับโฟลเดอร์


2

ฉันเพิ่งเริ่มต้นด้วย MacOS แต่มีพฤติกรรมการทำให้เสร็จสมบูรณ์อย่างแปลกประหลาดกับbashเชลล์ (เทียบกับ OpenSuse Linux กับ tcsh ที่ฉันมาจาก) ที่กำลังดักฉัน:

ตัวอย่างเช่นเมื่อฉันอยู่ใน $ HOME และเขียน Pu ในบรรทัดคำสั่งแล้วตามด้วยการแท็บเพื่อทำให้สำเร็จฉันคาดว่าหนึ่งในตัวเลือกที่แสดงจะเป็นสาธารณะ / ไดเรกทอรีของฉัน อย่างไรก็ตามตราบใดที่มีไฟล์ที่ปฏิบัติการได้การดำเนินการให้เสร็จสมบูรณ์จะไม่แสดงไดเรกทอรีที่ใช้คำนำหน้าเหมือนกัน หลังจากป้อน Publ แล้วความสมบูรณ์ของแท็บจะทำให้ฉันเป็นสาธารณะ / เนื่องจากไม่มีสิ่งที่เรียกใช้งานได้อีกต่อไปด้วยคำนำหน้านั้น

ดังนั้นคำถามของฉันจะมีตัวเลือกให้มีความสมบูรณ์แสดงโดยตรง executables และไดเรกทอรีด้วยคำนำหน้าให้?

ฉันลองอัปเกรดเป็น bash 4 และติดตั้ง bash-completion ผ่าน homebrew แล้ว แต่ก็ไม่ได้ช่วยอะไร ฉันสงสัยว่าทั้ง readline MacOS ทำงานแตกต่างกันหรือว่ามีการตั้งค่าเพิ่มเติมสำหรับ. inputc ซึ่งฉันไม่ทราบ

ฉันรู้เพิ่มเติมว่าเริ่มต้นด้วย. / ฉันได้รับเฉพาะไดเรกทอรี นี่คือ bandaid ที่ฉันใช้ในขณะนี้


คุณลองกดTabปุ่มสองครั้งหรือไม่? นั่นจะแสดงรายการความสำเร็จเท่าที่ฉันทราบ
Anton Todorov

ใช่ฉันทำ. ฉันจะเพิ่มสิ่งนี้ในคำถามเริ่มต้นเพื่อชี้แจง
shiin

ใน Mac ของฉันที่ใช้ Mavericks zshจะทำงานตามที่คุณอธิบาย แต่bashค้นหาโดยตรงไดเรกทอรีและ executables ในตอนแรก คุณสามารถเพิ่มในคำถามของคุณ: เปลือกที่คุณใช้และการส่งออกของls -ld Pu*?
แดน

ฉันระบุว่าฉันใช้bashในคำถาม ผลลัพธ์ของ ls เป็นเพียงPublic/โฟลเดอร์ executables ที่เริ่มต้นด้วยอยู่ในไดเรกทอรีของบางอย่างPu PATHคุณอธิบายพฤติกรรมอย่างดีในคำตอบของคุณและฉันสามารถตรวจสอบได้
shiin

คำตอบ:


1

สำหรับเชลล์ส่วนใหญ่ที่มีฟังก์ชั่นการขยายไฟล์สิ่งที่ถูกขยายในargv[0]ตำแหน่งคือไฟล์เรียกทำงานที่พบภายในหนึ่งในไดเรกทอรีของตัวแปร PATH

หากคุณต้องการค้นหาไดเรกทอรีเมื่อป้อนเป็นอาร์กิวเมนต์อันดับที่ 1 ภายในbashหรือzshเพียงแค่แก้ไขPATHดังต่อไปนี้:

PATH=${PATH}:.

และทดสอบด้วย:

Pubtab

สำหรับtcshการแก้ไข PATH ที่เทียบเท่าจะได้รับด้วย:

setenv PATH ${PATH}:.

การเตือน

การรวม.ไว้ในPATHตัวแปรคือความเสี่ยงด้านความปลอดภัย เนื่องจากการแก้ไขนี้ไฟล์ใด ๆ ในไดเรกทอรีที่คุณจะพบว่าเป็นคำสั่งมาตรฐาน สิ่งนี้อาจนำคุณไปสู่การเรียกใช้ไฟล์ที่คุณไม่เคยลองใช้ในการดำเนินการเป็นอย่างอื่น: ไฟล์เรียกทำงานซึ่งจะทำให้เกิดคอร์ดัมพ์ในไดเร็กทอรีการพัฒนาหรือไบนารีซึ่งจะทำให้คุณรันคำสั่งเพื่อเข้าถึงระบบของคุณ

ความเสี่ยงนี้เหมือนกันสำหรับ Unix ใด ๆ เช่น OS


ขอขอบคุณ. ฉันเพิ่งตรวจสอบบนพีซีเครื่องเก่าของฉันที่มหาวิทยาลัยและมีค่าเริ่มต้นPATHจริง.- นั่นคือเหตุผลที่ทำให้การทำงานที่แตกต่างมี แต่เกี่ยวกับคำเตือนของคุณฉันจะไม่เพิ่มกลับมาและทำความคุ้นเคยกับการใช้./ถ้าฉันต้องการเส้นทางในการทำให้เสร็จ ขอขอบคุณ.
shiin

ฉลาดและปลอดภัยย้าย :)
แดน

1

เท่าที่ฉันรู้มันเป็นคุณสมบัติไม่ใช่ข้อผิดพลาด

คุณก็สามารถเปลี่ยนไปtcsh, ที่นี่เป็นคำแนะนำ (ในที่สุดคุณจะต้องติดตั้งผ่านทาง homebrew แล้วปรับตัวเข้ากับเส้นทาง)


ขอบคุณสำหรับคำตอบ ฉันไม่ทราบว่าเป็นคุณลักษณะ - หรืออย่างน้อยหนึ่งรายการที่ไม่สามารถปิดใช้งานได้ ฉันอาจtcshลองอีกครั้ง แต่จริง ๆ แล้วฉันต้องการเปลี่ยนไปใช้สิ่งที่ใช้กันอย่างแพร่หลาย
shiin

โอ้ .. โอเค แต่คุณอาจลองตั้งค่าตัวเลือก bash ( shoptตัวเลือก shell) เพื่อให้ทำงานได้ ....
Schwertspize

-3

ลองใช้ด้วย. /Pub tabt]

./ ทำให้มันเป็นไดเรกทอรีปัจจุบันเพื่อเริ่มการทำงานของแท็บ

(ฉันต้องการที่จะรู้ว่ามันไม่เป็นประโยชน์อย่างที่มันทำงานบน Linux เช่นกัน?)


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