เมื่อฉันรวบรวม egxc โดย:
GCC x.c -o x
ในการดำเนินการผลลัพธ์ฉันต้องเขียน:
./x
และเพียงพิมพ์:
x
ล้มเหลวด้วยข้อความนี้:
x: ไม่พบคำสั่ง
หมายความว่า Linux ไม่ค้นหาไดเรกทอรีปัจจุบัน! มี (ฉันแน่ใจว่ามี) ปัญหาใด ๆ ที่เหมาะสมหลังพฤติกรรมนี้?
เมื่อฉันรวบรวม egxc โดย:
GCC x.c -o x
ในการดำเนินการผลลัพธ์ฉันต้องเขียน:
./x
และเพียงพิมพ์:
x
ล้มเหลวด้วยข้อความนี้:
x: ไม่พบคำสั่ง
หมายความว่า Linux ไม่ค้นหาไดเรกทอรีปัจจุบัน! มี (ฉันแน่ใจว่ามี) ปัญหาใด ๆ ที่เหมาะสมหลังพฤติกรรมนี้?
คำตอบ:
เนื่องจากโดยค่าเริ่มต้นไดเรกทอรีการทำงานปัจจุบันไม่ได้อยู่ในPATHตัวแปร
นี่คือมาตรการรักษาความปลอดภัย / ความสะดวกสบาย ถ้าคุณมีไบนารี / สคริปต์เรียกเช่นcd, lsฯลฯ ในไดเรกทอรีที่ทำงานปัจจุบันของคุณก็จะเป็นที่น่ารำคาญมากถ้าพวกเขาถูกเรียกใช้โดยค่าเริ่มต้น
cdในbashจะรันประจำภายในเพื่อทุบตีและไม่ได้/bin/cd) เว้นแต่คุณจะย่อหน้าด้วย `.`
slคุณมีปัญหาเดียวกัน ควรมีไดเรกทอรีที่เชื่อถือได้เท่านั้น$PATHและเส้นทางแบบสัมพัทธ์.จะไม่เป็นไดเรกทอรีที่เชื่อถือได้สำหรับเชลล์แบบโต้ตอบ
rm -r targetเมื่อฉันหมายถึงrm -f targetมักจะไม่แตกต่างกัน ถ้าฉันพิมพ์rm -f targetเมื่อฉันหมายถึงrm -r targetอาจไม่มีความแตกต่างหรือเอาออกทันที นอกจากนี้ผมคิดว่าทุกครั้งก่อนที่ผมชนิดrm, โดยเฉพาะอย่างยิ่งถ้าฉันเพิ่ม-fหรือ-rหรือ glob - มันเป็นคำสั่งโดยธรรมชาติของมันอันตราย ไม่มีใครคิดมาก่อนlsไอเอ็นจี
หมายความว่าไดเรกทอรีปัจจุบันไม่ได้อยู่ในตัวแปร $ PATH
คุณสามารถแก้ไขได้โดยเพิ่มไดเรกทอรีปัจจุบัน (แสดงด้วยจุดเดียว) ให้กับPATHตัวแปรสภาพแวดล้อม
วิธีการทำขึ้นอยู่กับเชลล์ที่คุณใช้
หากคุณกำลังใช้ bash คุณสามารถเพิ่มบรรทัด export PATH=$PATH:.ลงใน.bashrcไฟล์ในโฮมไดเร็กตอรี่ของคุณได้
หากคุณใช้ csh หรือ tcsh ให้เพิ่มบรรทัด
set PATH = ($PATH .)ลงในไฟล์. cshrc ในโฮมไดเร็กตอรี่ของคุณ
IMHO สำหรับคอมพิวเตอร์เดสก์ท็อปที่บ้านสิ่งนี้เป็นสิ่งที่ยอมรับได้ - ความปลอดภัยที่ชาญฉลาด