ฉันมีสคริปต์ทุบตีเช่น:
#!/bin/bash
echo Hello world!
ฉันจะดำเนินการใน Terminal ได้อย่างไร
ฉันมีสคริปต์ทุบตีเช่น:
#!/bin/bash
echo Hello world!
ฉันจะดำเนินการใน Terminal ได้อย่างไร
คำตอบ:
$prompt: /path/to/script
และกด Enter โปรดทราบว่าคุณต้องตรวจสอบให้แน่ใจว่าสคริปต์มีสิทธิ์ดำเนินการ
/path/to
ไดเร็กทอรีอยู่แล้วเช่นด้วยcd /path/to
คำสั่งคุณสามารถป้อน./script
เพื่อเรียกใช้สคริปต์ของคุณได้อย่าลืมในกรณีนี้คือ "./ 'before' script '
อีกวิธีหนึ่งในการดำเนินการ (คราวนี้โดยไม่ต้องตั้งค่าสิทธิ์ในการดำเนินการ):
bash /path/to/scriptname
cd ไปยังไดเร็กทอรีที่มีสคริปต์หรือวางไว้ในโฟลเดอร์ bin ที่อยู่ใน $ PATH ของคุณ
จากนั้นพิมพ์
./scriptname.sh
ถ้าอยู่ในไดเร็กทอรีเดียวกันหรือ
scriptname.sh
ถ้าอยู่ในโฟลเดอร์ bin
./scriptname.sh
การทำงานสำหรับฉัน แต่ให้scriptname.sh
เป็นสิทธิ์ของมัน scriptname.sh: command not found
-rwxr-xr-x
cd
ทุกที่ที่ก่อให้เกิดความเข้าใจผิดอื่น ๆ ของผู้เริ่มต้นทั่วไป เว้นแต่ว่าสคริปต์จะมีการอ้างอิงภายในซึ่งต้องการให้รันในไดเร็กทอรีเฉพาะ (เช่นต้องการอ่านไฟล์ข้อมูลที่สคริปต์ไม่มีตัวเลือกให้ชี้ไปที่อย่างอธิบายไม่ได้) คุณไม่จำเป็นต้องไปcd
ที่ใดก็ได้เพื่อเรียกใช้และ มักจะไม่ต้องการ
คุณสามารถทำได้:
sh scriptname.sh
sh
เป็น symlink ไปbash
หรือถ้าสคริปต์ไม่ได้ใช้ใด ๆ ที่สร้างทุบตีเฉพาะ ในกรณีเดิมการใช้bash
แทนsh
เป็นโซลูชันแบบพกพาที่ถูกต้องเท่านั้น ในกรณีหลังไม่ใช่คำตอบที่ถูกต้องสำหรับคำถามนี้เนื่องจาก OP ถามเกี่ยวกับคำแนะนำสำหรับสคริปต์ Bash โดยเฉพาะ การละเมิดคำตอบที่ผิดนั้นไร้ความรับผิดชอบ ผู้ใช้ที่ไม่เข้าใจความแตกต่างมักโพสต์ที่นี่และจำเป็นต้องแสดงให้เห็นว่าเหตุใดคำตอบ "ได้ผลสำหรับฉัน" จึงไม่ได้ผลสำหรับพวกเขา
ประการแรกคุณต้องทำให้มันสามารถใช้งานได้โดยใช้: chmod +x name_of_your_file_script
.
หลังจากที่คุณทำให้มันสามารถเรียกใช้งานได้คุณสามารถเรียกใช้โดยใช้ไฟล์ ./same_name_of_your_file_script
เปลี่ยนไดเร็กทอรีของคุณไปยังตำแหน่งที่สคริปต์อยู่โดยใช้คำสั่งcd
จากนั้นพิมพ์
bash program-name.sh
cd
ที่ใดก็ได้ คุณสามารถ speciy ชื่อเส้นทางที่ซับซ้อนโดยพลการเป็นอาร์กิวเมนต์ไปbash
; แน่นอนโปรแกรมใด ๆ ที่ใช้อาร์กิวเมนต์ชื่อไฟล์จะทำงานในลักษณะนี้ (หรือแย่มากจนทำให้มึนงง)
นี่เป็นกระทู้เก่า แต่ฉันบังเอิญเจอและรู้สึกแปลกใจที่ยังไม่มีใครตอบคำถามได้ครบถ้วน ต่อไปนี้ ...
ถาม:ฉันจะดำเนินการสิ่งนี้ใน Terminal ได้อย่างไร
ความสับสนและความขัดแย้ง:
sudo
ดำเนินการใด ๆ คำสั่งนี้สงวนไว้สำหรับการรันคำสั่งในฐานะผู้ใช้อื่นหรือผู้ใช้ 'root' (ผู้ดูแลระบบ) โพสต์ที่ดีที่นี่(ผู้ที่เพิ่งเรียนรู้วิธีเรียกใช้สคริปต์ไม่ควรใช้คำสั่งนี้เว้นแต่จะมีความจำเป็นจริงๆเช่นการติดตั้งโปรแกรมใหม่สถานที่ที่ดีในการวางสคริปต์ของคุณอยู่ในโฟลเดอร์ ~ / bin ของคุณคุณสามารถไปที่นั่นได้โดย พิมพ์cd ~/bin
หรือcd $HOME/bin
จากพรอมต์เทอร์มินัลคุณจะมีสิทธิ์ทั้งหมดในโฟลเดอร์นั้น)
ในการ "เรียกใช้สคริปต์นี้" จากเทอร์มินัลบนระบบประเภท Unix / Linux คุณต้องทำสามสิ่ง:
บอกตำแหน่งของสคริปต์ให้ระบบทราบ (เลือกหนึ่ง)
/path/to/script.sh
) คุณสามารถตรวจสอบเส้นทางแบบเต็มได้โดยพิมพ์pwd
หรือecho $PWD
ในเทอร์มินัล./
สำหรับพา ธ (เช่น./script.sh
) ง่าย.PATH
และพิมพ์ชื่อ (เช่นscript.sh
) คุณสามารถตรวจสอบระบบได้PATH
โดยพิมพ์echo $PATH
หรือecho -e ${PATH//:/\\n}
หากคุณต้องการรายชื่อที่ใกล้เคียงบอกระบบว่าสคริปต์มีสิทธิ์ดำเนินการ (เลือกหนึ่ง)
บอกประเภทของสคริปต์ให้ระบบทราบ (เลือกหนึ่ง)
BASH /path/to/script.sh
หรือPHP /path/to/script.php
) หากสคริปต์มีส่วนขยายเช่น. php หรือ. py เป็นส่วนหนึ่งของชื่อสคริปต์และคุณต้องรวมไว้ด้วย#!/bin/bash
) ในตัวอย่างของคุณ หากคุณมีสิ่งนั้นเป็นบรรทัดแรกของสคริปต์ของคุณระบบจะใช้โปรแกรมนั้นเพื่อเรียกใช้สคริปต์ ไม่ต้องพิมพ์โปรแกรมหรือใช้นามสกุลPATH
โดยใช้#!/usr/bin/env
ตามด้วยชื่อโปรแกรม (เช่น#!/usr/bin/env bash
หรือ#!/usr/bin/env python3
) มีข้อดีและข้อเสียตามที่กล่าวไว้อย่างละเอียดอยู่ที่นี่script.sh
และscript.php
เป็นชื่อไฟล์ตามตัวอักษรของสคริปต์เหล่านี้และหากคุณใส่นามสกุลในชื่อไฟล์คุณจะต้องรวมไว้เมื่อคุณเรียกใช้สคริปต์ (และในทางกลับกันถ้าสคริปต์ไม่ ' ไม่มีนามสกุลอย่าใส่อย่างใดอย่างหนึ่ง) ซึ่งแตกต่างจากเช่น DOS ที่คุณสามารถละเว้น.bat
หรือ.exe
จากชื่อไฟล์และไฟล์ที่จำเป็นต้องมีส่วนขยายจากชุดเล็ก ๆ จึงจะถือว่าสามารถเรียกใช้งานได้
หากคุณอยู่ในไดเร็กทอรีหรือโฟลเดอร์ที่มีไฟล์สคริปต์ให้เปลี่ยนการอนุญาตไฟล์ในโหมดปฏิบัติการโดยทำ
chmod +x your_filename.sh
หลังจากนั้นคุณจะรันสคริปต์โดยใช้คำสั่งต่อไปนี้
$ sudo ./your_filename.sh
เหนือ "." แทนไดเร็กทอรีปัจจุบัน บันทึก! หากคุณไม่ได้อยู่ในไดเร็กทอรีที่มีไฟล์ bash script อยู่ให้คุณเปลี่ยนไดเร็กทอรีที่ไฟล์นั้นอยู่โดยใช้
cd Directory_name/write the complete path
คำสั่ง มิฉะนั้นสคริปต์ของคุณจะไม่สามารถทำงานได้
sudo
เป็นที่ไม่ถูกต้องและอาจน่ากลัวผิดถ้าคุณใช้มันในสคริปต์ที่ไม่น่าเชื่อถือซึ่งละเมิดอำนาจที่คุณไม่จำเป็นต้องให้มัน
cd
บางแห่งนั้นยากที่จะเข้าใจ แต่ก็อาจจะผิดด้วย
chmod +x scriptname
./scriptname