ฉันมีสคริปต์ทุบตีเช่น:
#!/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