เหตุใดจึง. / จึงจำเป็นต้องเรียกใช้ไฟล์ที่รันได้


9

./ฉันใช้อูบุนตูและผมสังเกตหลายสคริปต์ที่ทำงานได้ฉันจะไม่ทำงานจนกว่าฉันนำหน้าโดยธีม

ตัวอย่างเช่นหากฉันมีสคริปต์ Perl: /home/me/script.plและตอนนี้ฉันกำลัง/home/meพิมพ์อยู่script.plจะไม่ทำ แต่./script.plจะ

ทำไมถึงเป็นอย่างนั้น?


@ David B: runnable file => executable file?
Lazer

คำตอบ:


13

ในการรันสคริปต์คุณต้องพิมพ์พา ธ แบบเต็มไปยังสคริปต์ยกเว้นว่าสคริปต์นั้นมีอยู่ในหนึ่งในไดเรกทอรีที่ระบุไว้ใน$PATHตัวแปรสภาพแวดล้อมของคุณ โดยทั่วไป (และโดยค่าเริ่มต้น) .(ไดเรกทอรีปัจจุบัน) ไม่ได้อยู่ในคุณ$PATHดังนั้นคุณต้องพิมพ์./scriptเพื่อดำเนินการ


21

เพราะไดเรกทอรีปัจจุบันไม่ได้อยู่ในเส้นทางของคุณ นี่คือคุณสมบัติด้านความปลอดภัย หากอยู่ในเส้นทางของคุณบางคนอาจวางสำเนาคำสั่งทั่วไปที่เป็นอันตรายและเมื่อคุณอยู่ในไดเรกทอรีนั้นแทนการเรียกใช้ sudo จริงตัวอย่างเช่นคุณจะเรียกใช้ปลอม นั่นเป็นสิ่งที่ไม่ดี


3
สิ่งนี้ค่อนข้างทำให้เข้าใจผิด ตราบใดที่.มีหลังจากที่มันจะไม่แทนที่จริง/usr/bin/ sudoคือเพื่อให้แน่ใจว่าคุณจะไม่เพิ่มโปรแกรมลงในเส้นทางของคุณโดยไม่ได้ตั้งใจ แต่ไม่ได้เกี่ยวกับการแทนที่โปรแกรมที่มีอยู่เป็นหลัก
Matthew Flaschen

แทนที่จะsudo, ฉันต้องการใช้และls rmมีโอกาสมากที่จะถูกเรียกว่า
Aaron Digulla

@aaron: แน่นอน แต่lsจะไม่ขอรหัสผ่านของคุณและถ้าผู้ใช้สามารถใช้sudoรหัสผ่านเป็นที่น่าสนใจ ... ;)
Laurent

1
@ Matthew ใช่มันยังคงเป็นเรื่องยากที่จะใช้ประโยชน์ แต่ความเสี่ยงด้านความปลอดภัยที่แท้จริง ให้บอกว่าฉันใส่สคริปต์slที่ทำสิ่งที่ไม่ดีแล้วเรียกใช้lsแล้วลบตัวเอง คุณไม่สามารถแทนที่เครื่องมือระบบ แต่คุณสามารถ 'typosquat'
Rich Homolka

@laurent: cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@"สิ่งที่ฉันมีในใจคือ: ไม่จำเป็นต้องรู้รหัสผ่าน
Aaron Digulla

4
echo $PATH

คุณต้องมีไดเรกทอรีปัจจุบัน (จุดเดียว) ในเส้นทางของคุณเพื่อให้การทำงาน

คุณสามารถเพิ่มลงในพา ธ ของคุณหากคุณต้องการด้วยคำสั่งต่อไปนี้

ดวลจุดโทษ / ทุบตี: export PATH=$PATH:.

tcsh / csh: set PATH = ($PATH .)


3

เชลล์ค้นหาพา ธ สำหรับไฟล์ประมวลผลและโดยค่าเริ่มต้น./จะไม่อยู่ในพา ธ

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