ฉันควรบันทึกสคริปต์ด้วยนามสกุล. sh หรือไม่


66

ฉันมีสคริปต์การทำงานบางอย่างและฉันต้องการคัดลอกไปที่/usr/binฉันต้องการใช้พวกเขาเป็นคำสั่ง terminal ปกติ เป็นวิธีปฏิบัติที่ดีที่จะใช้.shส่วนขยายหรือฉันสามารถบันทึกโดยไม่มีส่วนขยายได้หรือไม่


6
นอกจากนี้หากคุณต้องการให้สคริปต์เหล่านั้นพร้อมใช้งานสำหรับผู้ใช้ทั้งหมด/usr/local/binอาจเป็นตัวเลือกที่ดีกว่า
เซเลม

6
@Salem /usr/binและ/usr/local/binทั้งคู่ควรพร้อมใช้งานสำหรับผู้ใช้ทั้งหมด แต่/usr/local/binจะดีกว่าสำหรับโปรแกรมที่ไม่ได้เป็นส่วนหนึ่งของแพ็คเกจ
gerrit

ประโยชน์อย่างเดียวที่ฉันได้เห็นคือบรรณาธิการเช่นเสียงเรียกเข้าหรือนาโนรู้วิธีไฮไลต์ตั้งแต่เริ่มต้นและนั่นเป็นเรื่องเกี่ยวกับมัน
rath

1
@rath ฉันได้รับการเน้นไวยากรณ์โดยไม่มีนามสกุลถ้าฉันได้ shebang ตั้งหรือ#!/usr/bin/env bash #!/bin/bash
Sparhawk

@Sparhawk แท้จริง แต่ฉันมักจะลืมมันจนฉันพยายามที่จะเรียกใช้สคริปต์;)
ไทยรัฐ

คำตอบ:


71

ไม่มันไม่ใช่วิธีปฏิบัติที่ดีคุณควรเก็บสคริปต์ของคุณโดยไม่มีการขยาย หมายเหตุว่าสคริปต์เป็นส่วนหนึ่งของแพคเกจไม่ได้.shส่วนขยายเช่นปรับปรุงด้วงไม่update-grub.sh หากคุณยังไม่มั่นใจคุณควรแนะนำGoogle Shell Style Guideว่า:

ไฟล์เรียกทำงานไม่ควรมีนามสกุล (แนะนำอย่างยิ่ง)หรือนามสกุล. sh ไลบรารี่จะต้องมีนามสกุล. sh และไม่สามารถเรียกใช้งานได้

PS /binคุณไม่ต้องใส่สคริปต์ของคุณลงใน คุณสามารถสร้างไดเรกทอรี~/binและวางสคริปต์ของคุณได้ ไดเรกทอรี~/binจะรวมอยู่ใน$PATHโดยค่าเริ่มต้นดังนั้นสคริปต์ที่ทำให้สามารถเรียกใช้เป็นคำสั่งเชลล์อื่น ๆ ได้


4
"ไดเรกทอรี ~ / bin รวมอยู่ใน$PATHค่าเริ่มต้น" - ตั้งแต่เมื่อใด อย่างไรก็ตาม~/.local/binอาจเป็นตัวเลือกที่ดีกว่าเนื่องจากเป็นมาตรฐาน
nyuszika7h

1
คุณหมายถึง "ไลบรารีต้องมีนามสกุล. so" ใช่ไหม ไม่ดวลจุดโทษ
Keith Wolters

3
@ KeithWolters ก่อนไม่ใช่ฉัน แต่เป็น Google สอง. .sh ไม่ใช่. so เรากำลังพูดถึงเชลล์สคริปไม่ใช่ไบนารี

1
คู่มือสไตล์ของ Google นั้นเฉพาะเจาะจงกับ Google มาก ตัวอย่างเช่น "Bash เป็นภาษาสคริปต์เชลล์เท่านั้นที่ได้รับอนุญาตสำหรับไฟล์ปฏิบัติการ" เห็นได้ชัดว่ากฎภายในไม่ใช่วิธีปฏิบัติที่ดีที่สุด
พอลเดรเปอร์

1
@ nyuszika7h ลองดู ~ / .profile ... มันแทรก $ HOME / bin เข้าไปในเส้นทางของคุณหากมีไดเรกทอรีอยู่
Corey Goldberg

9

ฉันสองแนะนำให้ใช้~/binซึ่งจะได้รับการเพิ่มโดยอัตโนมัติใน$PATHขณะที่Sergeyกล่าวว่า หรือซึ่งอาจจะอยู่ใน/usr/local/bin PATHอย่างไรก็ตาม:

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

    $ dpkg -S `ls /usr/bin/*.sh`
    mtools: /usr/bin/amuFormat.sh
    gettext-base: /usr/bin/gettext.sh

    ดังนั้นถ้าคุณเป็นบรรจุภัณฑ์อย่าทิ้งส่วนขยายเอาไว้


2
~/binจะถูกเพิ่มไปยัง$PATHอัตโนมัติหากมีอยู่ไม่จำเป็นต้องเพิ่มด้วยตนเอง เพียงสร้างไดเรกทอรีออกจากระบบและเข้าสู่ระบบอีกครั้ง
Sergey

5

เพียงใส่บรรทัดต่อไปนี้ที่ด้านบนของไฟล์:

#!/bin/bash

ไฟล์ดังกล่าวจะถูกพิมพ์โดยอัตโนมัติ: Shell Scriptโดยไม่มีส่วนขยายใด ๆ !

อย่าลืมให้สิทธิ์การดำเนินการกับไฟล์

สำหรับการวางสคริปต์เพื่อให้สามารถรันโดยคำสั่งโดยตรงไปที่: ฉันควรวางสคริปต์ของฉันไว้ที่ใดเพื่อให้สามารถรันได้โดยใช้คำสั่งโดยตรง


2
หรือแม้แต่ #! / bin / sh หากคุณไม่ต้องการเชลล์ bash แบบเต็ม
flickerfly

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