วิธีค้นหาไดเร็กทอรีที่มี Bash Script จากภายในสคริปต์
ในขณะที่เขียนสคริปต์ทุบตี คุณอาจต้องการตำแหน่งของสคริปต์เพื่อทำงานต่างๆ โดยอัตโนมัติ มีพาธสองประเภทใน Linux:
- เส้นทางญาติ: ญาติคือไดเร็กทอรีการทำงานปัจจุบัน
- เส้นทางสัมบูรณ์: นี่คือเส้นทางที่สมบูรณ์ของไดเร็กทอรีและไฟล์
วิธีหนึ่งที่พบได้บ่อยที่สุดในการกำหนดตำแหน่งของสคริปต์ทุบตีคือการใช้ รหัสผ่าน สั่งการ. เดอะ รหัสผ่าน สั่งการ ( พิมพ์ไดเรกทอรีการทำงาน) จะแสดงไดเรกทอรีปัจจุบัน
ดังนั้นในหลาย ๆ สถานการณ์เพียงแค่ใช้ รหัสผ่าน คำสั่งไม่ทำงานเนื่องจากให้เฉพาะเส้นทางของไดเร็กทอรีที่กำลังทำงานอยู่เท่านั้น
ตัวอย่างเช่น หากสคริปต์อยู่ใน ดาวน์โหลด ไดเร็กทอรีและถูกเรียกใช้งานจากไฟล์ เดสก์ทอป จากนั้นผลลัพธ์จะมี /home/usr/เดสก์ท็อป ไม่ใช่ตำแหน่งของไฟล์สคริปต์ทุบตีนั่นคือ /home/usr/ดาวน์โหลด .
บทช่วยสอนนี้เกี่ยวกับการรับเส้นทางของไดเร็กทอรีซึ่งมีไฟล์สคริปต์ bash จากภายในสคริปต์
วิธีรับเส้นทางไดเรกทอรีซึ่งเป็นที่ตั้งของไฟล์ Bash Script
อีกวิธีในการกำหนดไดเร็กทอรีของสคริปต์ Bash คือการใช้ ชื่อ สั่งการ. เดอะ ชื่อ คำสั่งใช้เส้นทางของไฟล์เป็นอาร์กิวเมนต์และส่งคืนส่วนไดเร็กทอรีของเส้นทาง
ใช้ ชื่อ คำสั่งเพื่อกำหนดไดเร็กทอรีของสคริปต์ คุณจะเรียกใช้คำสั่งพร้อมกับพาธจนถึงส่วนประกอบที่ไม่ใช่สแลชสุดท้ายไปยังสคริปต์เป็นอาร์กิวเมนต์
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ ชื่อ รันคำสั่งต่อไปนี้ในเทอร์มินัล:
$ ผู้ชาย ชื่อเท่านั้น ชื่อ จะไม่ทำงาน เราต้องการคำสั่งอื่นนั่นคือ อ่านลิงค์ . เดอะ อ่านลิงค์ คำสั่งพิมพ์แก้ไขลิงก์สัญลักษณ์ รับข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งนี้โดยเรียกใช้:
$ ผู้ชาย อ่านลิงค์ตอนนี้, สร้างสคริปต์ :
$ ซูโด นาโน myScript.shและพิมพ์:
#!/bin/bashเสียงสะท้อน 'เส้นทางสคริปต์ทุบตีคือ $(dirname -- '$(readlink -f – '$0') ' ; ) ';
ในการเรียกใช้สคริปต์ให้ใช้:
$ ทุบตี myScript.sh
ลองเปลี่ยนไดเร็กทอรีและดูว่าผลลัพธ์คืออะไร:
บันทึก: ในกรณีหนึ่ง สคริปต์ด้านบนจะไม่ทำงานหากไฟล์มีแหล่งที่มาแทนที่จะดำเนินการ ดังที่เห็นได้จากเอาต์พุตต่อไปนี้:
ผลลัพธ์คือ /home/sam/เดสก์ท็อป ในขณะที่ไฟล์สคริปต์มีอยู่ในไฟล์ /บ้าน/แซม ไดเรกทอรี
บทสรุป
โดยสรุป มีหลายวิธีในการกำหนดไดเร็กทอรีของสคริปต์ทุบตีจากภายในสคริปต์เอง เดอะ ชื่อ พร้อมด้วย อ่านลิงค์ ยูทิลิตี้สามารถใช้เพื่อกำหนดไดเร็กทอรีของสคริปต์ อย่างไรก็ตาม เพียงแค่ใช้ รหัสผ่าน คำสั่งไม่ทำงานเนื่องจากให้ไดเร็กทอรีที่ทำงานในปัจจุบันเท่านั้น