วิธีการรันสคริปต์ทุบตี?


19

ดังนั้นฉันจึงเขียนสคริปต์ทุบตีแรกของฉัน:

#!/bin/bash
echo 'hello world!'
exit

ฉันรู้ว่ามันมีตำแหน่งที่เหมาะสมในการทุบตีและสามารถใช้งานได้:

$ which bash
/bin/bash
$ chmod +x myscript.sh

ตอนนี้ฉันต้องการเรียกใช้จากบรรทัดคำสั่ง แต่ฉันได้รับข้อผิดพลาด:

$ myscript.sh
myscript.sh: command not found

ดังนั้นแทนที่จะลองทำสิ่งนี้และใช้งานได้:

$ bash myscript.sh
hello world!

นี่เป็นวิธีที่ฉันจะต้องดำเนินการหรือไม่ ฉันรู้สึกเหมือนฉันได้ดำเนินการสคริปต์อื่น ๆ bashได้โดยไม่ต้องนำหน้าด้วย ฉันจะรัน myscript.sh โดยไม่ต้องนำหน้าด้วยได้bashอย่างไร

ปรับปรุง:นี่คือคำอธิบายที่ดีของสาเหตุและวิธีการดำเนินการสคริปต์ทุบตี

คำตอบ:


28

คุณต้องทำให้ไฟล์ปฏิบัติการได้ คุณสามารถทำได้ด้วย

chmod +x <filename>

ที่เป็นชื่อของสคริปต์ของคุณและจากนั้นคุณจะต้องเสริมด้วย./เพื่อแนะนำให้เปลือกเพื่อเรียกใช้ไฟล์ในไดเรกทอรีท้องถิ่นเช่น:

./script.sh

คุณสามารถเรียกใช้ไฟล์ที่อยู่ในPATHหรือของคุณที่คุณระบุเส้นทางไปยังพวกเขา ./ไดเรกทอรีในเครื่องไม่ได้อยู่ในPATHค่าเริ่มต้นเพราะบางคนอาจใช้เพื่อจุดประสงค์ที่สามานย์ ลองนึกภาพสคริปต์ที่เรียกว่าlsดรอปในไดเรกทอรีคุณเข้าไปในไดเรกทอรีนั้นรันlsและสคริปต์นั้นทำสิ่งที่ไม่ดี

ในขณะที่คุณอยู่ที่นี่คุณอาจต้องการให้พกพาได้มากกว่าโดยใช้เชลล์แทนการทุบตีโดยใช้:

#!/bin/sh

หรือโดยการรันทุบตีไม่ว่าจะติดตั้งที่ไหนตราบเท่าที่ติดตั้ง:

#!/usr/bin/env bash

ฉันได้ทำแล้วกับ chmod + x myscript.sh ฉันทำผิดหรือเปล่า?
Andrew

1
คุณอาจหายไป. / ฉันได้เพิ่มเข้าไปในคำตอบแล้ว
pupeno

1

นอกจากคำแนะนำของFernándezแล้วให้นำหน้าด้วยจุดเช่นนี้:

./myscript.sh

เพื่อเหตุผลด้านความปลอดภัยไดเรกทอรีปัจจุบันจะไม่รวมอยู่ในเส้นทางการดำเนินการ


1

มี 3 วิธีในการเรียกใช้งานสคริปต์ทุบตี ด้วยตัวอย่าง myscript.sh เป็นสคริปต์ที่คุณต้องการดำเนินการ

วิธีที่ 1

รันสคริปต์เป็นกระบวนการย่อยซึ่งจะทำให้เกิดปัญหาสิทธิ์หากไม่ได้เป็นเจ้าของการเขียน คุณสามารถเปลี่ยนการอนุญาตโดย chmod

$ chmod + x myscript.sh

$ ./myscript.sh

วิธีที่ 2

เรียกใช้สคริปต์ในฐานะผู้ใช้ปัจจุบัน หากสคริปต์ทุบตีเขียนดีก็ไม่ควรมีข้อผิดพลาด

$ bash myscript.sh

วิธีที่ 3

คล้ายกับวิธีที่ 2 แต่เป็นทางลัด โปรดทราบว่านี่เป็นไปตามสมมติฐานที่ว่าคุณกำลังใช้ bash shell ในเซสชันปัจจุบัน

$ myscript.sh

หวังว่านี่จะช่วยได้! :)

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