ใช้. sh หรือ. bash extension สำหรับสคริปต์ทุบตี?


36

(ดูการใช้ #! / bin / sh หรือ #! / bin / bash สำหรับความเข้ากันได้ของ Ubuntu-OSX และใช้งานง่าย & POSIX )

ถ้าฉันต้องการให้สคริปต์ของฉันใช้ bash shell ให้ใช้ส่วนขยาย. bash จริง ๆ แล้วเรียกใช้ bash หรือขึ้นอยู่กับ system config / 1st shebang line หากทั้งคู่มีผล แต่แตกต่างกันซึ่งจะมีความสำคัญกว่ากัน

ฉันไม่แน่ใจว่าจะจบสคริปต์ด้วย. sh เพียงแค่ระบุ "shell script" จากนั้นให้บรรทัดแรกเลือก bash shell (เช่น#!/usr/bin/env bash) หรือว่าจะจบด้วยbash (เช่นเดียวกับการตั้งค่าบรรทัด 1) ) ฉันต้องการทุบตีเพื่อเรียกใช้


3
ฉันไม่คิดว่าฉันเคยเห็น.bashส่วนขยายมาก่อน นอกจากนี้ยังมีนโยบาย Debian ที่มีสคริปต์ในแพ็คเกจที่อยู่ในbinโฟลเดอร์ใดโฟลเดอร์หนึ่งที่ไม่มีส่วนขยาย
muru

คำตอบ:


19

การใช้ส่วนขยาย. bash เรียกใช้ bash จริงหรือขึ้นอยู่กับระบบ config / 1st shebang line

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

[sreeraj@server ~]$ cat ./ext.py
#!/bin/bash
echo "Hi. I am a bash script"

ดูที่การ.pyขยายไปยังสคริปต์ทุบตีไม่ได้ทำให้มันเป็นสคริปต์หลาม

[sreeraj@server ~]$ python ./ext.py
  File "./ext.py", line 2
    echo "Hi. I am a bash script"
                                ^
SyntaxError: invalid syntax

มันเป็นbashสคริปต์เสมอ

[sreeraj@server ~]$ ./ext.py
Hi. I am a bash script

23

การตั้งชื่อสคริปต์ไม่เกี่ยวข้องกับการเรียกใช้

บรรทัด shebang กำหนดสิ่งที่ล่ามที่ใช้ในการเรียกใช้สคริปต์

โดยส่วนตัวฉันไม่สนใจว่าสคริปต์จะดวลจุดโทษ Perl อะไรก็ตามฉันเลยตั้งชื่อมันว่ามันทำอะไร ฉันพบว่าการเพิ่มส่วนขยายซ้ำซ้อน ฉันจะทำfile scriptnameเพื่อค้นหาว่าไฟล์คืออะไรถ้าฉันต้องการที่จะรู้ว่า

ดังนั้นหากคุณต้องการให้สคริปต์ทำงานbashให้ใช้#!/bin/bashเป็นบรรทัดแรก


4
นอกจากนี้หากตัวเลือกการนำไปปฏิบัติสำหรับสคริปต์เปลี่ยนแปลงตลอดเวลา (บอกว่ามันเขียนใหม่ใน Python, Perl, C ... ) การไม่มี.shส่วนขยายของสไตล์หมายความว่าไม่จำเป็นต้องเปลี่ยนชื่อใหม่ (เป็นที่ยอมรับว่าไม่มีอะไรขัดขวางโปรแกรม C ที่สร้างไบนารีด้วย.shส่วนขยายมันจะสร้างความสับสน)
Stephen Kitt

2
ใช้#!/usr/bin/env bashสำหรับการพกพาได้ที่นี่stackoverflow.com/a/10383546/54964
LéoLéopold Hertz 준영

4
@wurtel (ความคิดเห็นล่าช้า, ตกลง?) การเพิ่มส่วนขยาย imho อยู่ไกลจากซ้ำซ้อน บรรณาธิการส่วนใหญ่รองรับการเน้นไวยากรณ์ตามส่วนขยายรวมถึงการมองเห็นไฟล์ประเภททันที ความชัดเจนและความพร้อมใช้งานมีความสำคัญมาก
RolfBly

@RolfBly: บรรณาธิการที่ฉันใช้รู้จัก shebang และให้การเน้นไวยากรณ์ ความชัดเจนมีประโยชน์ แต่ส่วนใหญ่เวลาที่เราต้องการรันคำสั่งและมันก็ดีถ้าฉันต้องพิมพ์ให้น้อยลงและถ้าฉันไม่จำภาษาที่ใช้
Hontvári Levente
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.