จุดสำคัญคือ: ส่วนขยายที่ไม่เกี่ยวข้องใด ๆ ในยูนิกซ์เช่นระบบ system.A ชื่อไฟล์เป็นเพียงชื่อและไม่มีผลกระทบหรือไม่ว่าสคริปต์หรือรวบรวมวิ่งสามารถปฏิบัติการได้ โปรแกรมเมอร์อาจเพิ่ม.sh
ส่วนขยายเพื่อกำหนดว่าไฟล์เป็นเชลล์สคริปต์หรือ.py
สำหรับสคริปต์ไพ ธ อน แต่ไม่เหมือนกับ Windows ยูนิกซ์ใด ๆ ที่ไม่สนใจการตั้งชื่อ แต่ก็มีความสำคัญกับการอนุญาต
สิ่งสำคัญคือสิทธิ์ในการเรียกใช้ที่อนุญาตให้กับไฟล์ ซึ่งคุณสามารถตรวจสอบด้วย
ls -l /path/to/file
กำลังเรียกใช้ไฟล์ปฏิบัติการ
ในการเรียกใช้สคริปต์โดยทั่วไปมีหลายวิธี
./my_script_name
หากไดเรกทอรีปัจจุบันของคุณเป็นเช่นเดียวกับสคริปต์และสคริปต์มีสิทธิ์ปฏิบัติการคุณสามารถเรียกใช้มันชอบดังนั้น .
หมายถึงไดเรกทอรีปัจจุบัน
- หากไดเรกทอรีปัจจุบันของคุณแตกต่างกันและสคริปต์มีสิทธิ์ในการเรียกใช้งานคุณสามารถเรียกใช้งานได้โดยระบุพา ธ เต็ม:
/home/user/bin/my_script_name
(ข้างต้นสองวิธีพึ่งพามีการตั้งค่าสิทธิ์ปฏิบัติการ; หรือไม่ว่าไฟล์เป็นส่วนหนึ่งของ$PATH
ตัวแปรที่ไม่เกี่ยวข้องการแสดงตนของ. #!
สายยังเรื่อง; โดยไม่ต้องมันสคริปต์ที่จะได้รับการดำเนินการโดยเปลือกปัจจุบันคุณมีเปิดถ้าผมมี. csh
สคริปต์ ไม่มีบรรทัดนั้นและพยายามเรียกใช้ด้วยการทุบตีด้วย./my_script.csh
มันจะล้มเหลว)
- หากสคริปต์ของคุณอยู่ในไดเรกทอรีที่เป็นส่วนหนึ่งของ
$PATH
ตัวแปรของคุณคุณสามารถเรียกใช้ได้เพียงแค่เรียกชื่อ คุณสามารถเรียกchmod
คำสั่งในบรรทัดคำสั่งเพียงแค่พิมพ์ชื่อเพราะมันอยู่ใน/bin
โฟลเดอร์ /bin
เป็นส่วนหนึ่งของ$PATH
ตัวแปรเสมอ ในกรณีนี้สิทธิ์ในการเรียกใช้งานและตำแหน่งของสคริปต์
- การระบุล่ามเป็นคำสั่งและสคริปต์เป็นอาร์กิวเมนต์ สคริปต์ดังกล่าวจะทำหน้าที่เป็นไฟล์อินพุตไปยังล่าม
- การจัดหาไฟล์
. filename.sh
หรือsource filename.sh
จะทำให้สคริปต์ที่ได้รับการปฏิบัติราวกับว่ามันเป็นคีย์บอร์ดคือเป็นถ้ามันเป็นพิมพ์ลงในบรรทัดคำสั่งโดยตรง ในกรณีนี้สิทธิ์การใช้งานและตำแหน่งจะไม่สำคัญ
ตัวอย่าง
ตัวอย่างที่ 1, ใช้งานล่ามเพื่อดำเนินการอนุญาต
$-> ls -l abc.py
-rw-rw-r-- 1 xieerqi xieerqi 44 Apr 27 22:39 abc.py
$-> python abc.py
a
b
c
ตัวอย่าง # 2, รันด้วย./
ชุดอนุญาตให้ใช้สิทธิ์, ชุดบรรทัด shebang
$-> cat abc.py
#!/usr/bin/env python
for letter in 'a' 'b' 'c' :
print letter
$-> ls -l abc.py
-rwxrwxr-x 1 xieerqi xieerqi 66 Apr 27 23:02 abc.py*
$-> ./abc.py
a
b
c
ตัวอย่าง # 3 ทำงานโดยไม่มีชุดบรรทัด shebang (ล้มเหลวเนื่องจากทุบตีไม่สามารถอ่านสคริปต์ python ได้ไม่มีบรรทัด shebang ถือว่าเชลล์ปัจจุบันเป็นล่าม)
$-> cat abc.py
for letter in 'a' 'b' 'c' :
print letter
$-> ./abc.py
./abc.py: 2: ./abc.py: Syntax error: word unexpected (expecting "do")
ตัวอย่าง # 4 การเรียกใช้สคริปต์ที่มีสิทธิ์อนุญาตในการเรียกใช้งานตั้งค่าโฟลเดอร์ฟอร์มที่เป็นส่วนหนึ่งของ$PATH
ตัวแปร
# /home/xieerqi/bin is part of my path variable
$-> echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/microchip/xc16/v1.25/bin:/opt/microchip/xc32/v1.40/bin:/opt/microchip/xc8/v1.35/bin:/home/xieerqi/bin:/home/xieerqi/bin/sh
$-> # current directory is /home/xieerqi
$-> pwd
/home/xieerqi
$-> # move the file to ~/bin
$-> mv ~/abc.py ~/bin/abc.py
$-> # now I can run it just by calling the name
$-> abc.py
/home/xieerqi/bin/abc.py: 2: /home/xieerqi/bin/abc.py: Syntax error: word unexpected (expecting "do")
$-> # Syntax error because again, no interpreter specified.
$-> # must add #!/usr/bin/env python
$-> vi /home/xieerqi/bin/abc.py
$-> # after adding the line with vi text editor, we can run
$-> abc.py
a
b
c
ตัวอย่าง # 5 การลบส่วนขยายยังคงทำงานเนื่องจากส่วนขยายไม่สำคัญ แต่ก็มีสิทธิ์และเป็นส่วนหนึ่งของ$PATH
:
$-> mv ~/bin/abc.py ~/bin/abc
$-> abc
a
b
c
.sh
เป็นส่วนขยายอยู่ในสถานการณ์ที่หลายคนคิดว่าการปฏิบัติที่ไม่ดี: มันขัดกับวิธีการที่คำสั่งอื่น ๆ ที่มีชื่อ (คุณไม่ได้ทำงานls.elf
) ก็มักจะเข้าใจผิด (ถ้าคุณfoo.sh
เริ่มต้นด้วย#!/bin/bash
แล้วการทำงานsh foo.sh
จะทำงานกับล่ามที่แตกต่างกว่าที่มันสร้างขึ้นมาเพื่อ ) และถ้าคุณเขียนใหม่foo.sh
เป็นโปรแกรม Python การใช้ส่วนขยายนั้นหมายความว่าคุณต้องเลือกระหว่างการรักษาชื่อที่ทำให้เข้าใจผิดในขณะนี้และเขียนใหม่ทุกโปรแกรมที่เรียกใช้