การเรียกคำสั่งในเชลล์ทำงานอย่างไร
ไม่มันไม่ใช่คำสั่ง วิธีการทำงานของเชลล์คือเมื่อคุณพิมพ์ในบรรทัดข้อความคำแรกจะถูกใช้เป็นคำสั่งและหากคำสั่งไม่ใช่หนึ่งในตัวของเชลล์แล้วเชลล์จะดูตำแหน่งทั้งหมดที่อยู่ในรายการPATH
ตัวแปรสภาพแวดล้อม .
จะเกิดอะไรขึ้นหากเมื่อคำสั่งที่คุณต้องการเรียกใช้อยู่ในไดเรกทอรีเดียวกับที่คุณอยู่ในขณะนี้ แต่ไดเรกทอรีนั้นไม่อยู่ในรายการPATH
ไดเรกทอรี ./
นั่นคือเมื่อคุณจำเป็นต้องใช้ มันเป็นแบบเดียวกับที่ทำ/bin/bash
- คุณกำลังบอกเชลล์ว่าคำสั่งที่คุณต้องการอยู่นั้นเป็นเส้นทางแบบเต็ม และในกรณีที่. / คุณกำลังบอกให้เชลล์ "มองหาในไดเรกทอรีนี้" ส่วนที่สำคัญคือคุณต้องอยู่ในไดเรกทอรีเดียวกันกับไฟล์ที่ตั้ง
chmod +x ./my_file
ของหลักสูตรเพื่อทำงานจริงปฏิบัติการนั้นจะต้องมีชุดปฏิบัติการบิตดังนั้นคุณจะต้อง
ดังนั้นขั้นตอนสำคัญ:
cd
ที่ที่คุณบันทึกไฟล์ ถ้ามันอยู่ใน~/Downloads
นั้นcd ~/Downloads
- เรียกใช้
chmod +x ./truecrypt-7.2-setup-x86
สิ่งนี้บอกว่า "ทำให้ไฟล์ truecrypt-7.2-setup-x86 ที่อยู่ในไดเรกทอรีนี้ทำงานได้"
- และตอนนี้ทำ
sudo ./truecrypt-7.2-setup-x86
โปรดทราบว่าการใช้./
ไม่ใช่พฤติกรรมแบบสุ่ม แต่จริง ๆ แล้วเป็นมาตรฐานที่ระบุโดยมาตรฐานส่วนต่อประสานระบบปฏิบัติการพกพา (aka POSIX)โดยเฉพาะดูส่วน "คำสั่งการค้นหาและการดำเนินการ"
ทำซ้ำข้อผิดพลาด
$ # my script is in ~/Downloads folder
$ stat -c "%n" /home/xieerqi/Downloads/my_script.sh
/home/xieerqi/Downloads/my_script.sh
$ # if I run sudo ./my_script.sh, we get an error
$ sudo ./my_script.sh
[sudo] password for xieerqi:
sudo: ./my_script.sh: command not found
$ # of course the command not found because file is not in ./, not in this dir
$ # this is not sudo's problem
$ # but sudo does indeed show the same error even if you're in same directory
$ cd ./Downloads/
$ sudo ./my_script.sh
[sudo] password for xieerqi:
sudo: ./my_script.sh: command not found
หมายเหตุ : ข้อความแสดงข้อผิดพลาดที่ให้ไว้โดยsudo
ชัดเจนทำให้เข้าใจผิดดังนั้นนี่คือสิ่งที่จะต้องเก็บไว้ในใจ; อย่างไรก็ตามโปรดทราบว่านี่ไม่ใช่ประเด็นหลักของคำถามที่ OP ถาม
เอกสารและการอ้างอิง
จากbash
คู่มือ 4.3 ส่วน "คำสั่งปฏิบัติการ":
หากชื่อนั้นไม่ใช่ฟังก์ชั่นของเชลล์หรือตัวบิวอินและไม่มีเครื่องหมายสแลช, bash จะค้นหาแต่ละองค์ประกอบของ PATH เพื่อหาไดเร็กตอรี่ที่มีไฟล์ที่ใช้งานได้ตามชื่อนั้น
จากเหตุใดคุณจึงต้องการ. / (dot-slash) หน้าชื่อสคริปต์เพื่อเรียกใช้ใน bash :
มันทำงานร่วมกับ. / เพราะPOSIX ระบุว่าชื่อคำสั่งที่มี / จะถูกใช้เป็นชื่อไฟล์โดยตรงยับยั้งการค้นหาใน $ PATH คุณสามารถใช้เส้นทางแบบเต็มเพื่อให้ได้เอฟเฟกต์เหมือนกัน แต่. / สั้นกว่าและเขียนง่ายกว่า
./
ส่วนหนึ่งของคำสั่งจะถูกบอกว่า "ดูในไดเรกทอรีปัจจุบันและรันคำสั่ง 'truecrypt-7.2 การติดตั้ง 86' จากที่นี่" คุณต้องเรียกใช้คำสั่งนี้จากไดเรกทอรีที่คุณแตกไฟล์