วิธีสร้างไฟล์ (เช่นสคริปต์. sh) เพื่อให้สามารถเรียกใช้จากเทอร์มินัล


245

ฉันมีไฟล์ script.sh และประเภทของไฟล์นี้คือไฟล์ shellscript ฉันต้องการให้ไฟล์นี้เป็นไฟล์แอปพลิเคชัน / ไฟล์ที่เรียกทำงานได้ x ฉันจะทำมันได้อย่างไร




มันไม่ได้ซ้ำกันเพราะฉันได้ถามเฉพาะเกี่ยวกับการทำให้มันใช้งาน / x-executable อีกคำถามก็แค่ขอเปิดไฟล์ sh ในเทอร์มินัล
Ziyaddin Sadigov

คำตอบ:


326

คุณสามารถทำเครื่องหมายไฟล์เป็นไฟล์เรียกทำงาน:

chmod +x filename.sh

จากนั้นคุณสามารถดำเนินการเช่นนี้:

./filename.sh

หากคุณต้องการใช้คำสั่งอื่นเพื่อเริ่มใช้งานคุณสามารถเพิ่มนามแฝงได้:

gedit ~/.bashrc

เพิ่มในตอนท้ายของไฟล์:

alias <new name>='/home/<full path to script>/filename.sh'

เปิดเทอร์มินัลเซสชันใหม่หรือพิมพ์source ~/.bashrcในเทอร์มินัลของคุณเพื่อนำไปใช้ จากนั้นใช้ชื่อใหม่เพื่อเริ่มสคริปต์


คุณรู้วิธีใช้คำสั่ง sudo หลังจากป้อนคำสั่งเป็น: "alias command1 = '/home/user_name/dir/script.sh' ในเหมืองมันทำงานโดยไม่มี sudo แต่ไม่ใช่กับมัน
Aditya

คุณต้องรีสตาร์ท bash หลังจากแก้ไข. bashrc run: exec bash เพื่อรีสตาร์ท bash
Sampath Perera

2
ทำไมไฟล์ที่เรียกใช้งานจึงเป็น./filename.shเช่นนั้นไม่ใช่แค่filename.sh?
user1993

@ user1993 ใช่ฉันยังมองหาวิธีที่จะทำให้มันใช้งานได้โดยfilenameไม่ต้องติดตั้ง./filename
MycrofD

@ user1993 โดยทั่วไปการใช้จะ./filename.shระบุไฟล์ในไดเรกทอรีปัจจุบันและการใช้จะfilename.shระบุไฟล์ในไดเรกทอรีปัจจุบันหรือไดเรกทอรีใด ๆ ของ PATH การใช้งานครั้งแรกจะลบความไม่แน่นอนใด ๆ ที่ไฟล์ถูกเข้าถึง ในกรณีนี้คุณกำลังพยายามรันสคริปต์ด้วย bash หรือล่ามอื่น (โดยอาศัยการสันนิษฐานว่า#!/bin/bashเป็นบรรทัดแรกในสคริปต์ของคุณ) เพียงแค่ป้อนชื่อไฟล์ การใช้งานนี้ต้องระบุไดเรกทอรี หรือคุณสามารถลองใช้bash filename.shซึ่งดูเหมือนว่าจะทำงานกับไดเรกทอรีที่ไม่ได้ระบุ
a505999

37

มีสองวิธีในการสร้างไฟล์ที่เรียกใช้งานได้:

วิธี GUI:

ไปที่แท็บการอนุญาตจากนั้นทำเครื่องหมายที่กล่อง `ดำเนินการ: [] อนุญาตให้เรียกใช้ไฟล์เป็นโปรแกรม

ป้อนคำอธิบายรูปภาพที่นี่

เทอร์มินัล / วิธีสั่ง:

คุณสามารถใช้:

cd /to/my/required/directory

จากนั้นเรียกใช้

chmod +x filename.extension

หรือเพียงแค่เรียกใช้:

chmod +x /path/to/your/filename.extension

chmod ยังมีตัวเลือกขั้นสูงเพิ่มเติม:

ช่องว่างคือการแสดงให้เห็นว่ามันถูกแบ่ง: - rwx --- ---

ชุดแรกของ---คือผู้ใช้ ที่สองคือกลุ่มและสุดท้ายคืออื่น ๆ (คนอื่น)

r หมายถึง Read, w สำหรับ Write และ x สำหรับ eXecute

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

-rw- rx- r-- แต่สิ่งนี้จะถูกเพิ่มไปยังคำสั่งเป็น:

chmod +rw-rx-r-- /path/to/file.extension

chmodยังสามารถทำสิ่งนี้เป็นตัวเลข มันขึ้นอยู่กับไบนารี (ฉันคิดว่ามันเป็น 1,2 และ 4)

ดังนั้นจึงมีตัวเลขเหล่านี้:

100ดำเนินการโดยผู้ใช้เป็น 010ดำเนินการโดยกลุ่มคือ ดำเนินการโดยคนอื่นคือ 001

200เขียนโดยผู้ใช้เป็น 020เขียนโดยกลุ่มคือ เขียนโดยอื่น ๆ 002คือ

400อ่านโดยผู้ใช้เป็น 040อ่านโดยกลุ่มคือ อ่านจากอื่น ๆ 004คือ

จากนั้นคุณเพิ่มเหล่านี้เข้าด้วยกันเพื่อให้ได้ชุดที่ต้องการ

ดังนั้นเพื่อให้ทุกคนอ่าน แต่มีเพียงกลุ่มที่จะดำเนินการและผู้ใช้เขียน (แต่ด้วยเหตุผลบางอย่างที่ไม่ได้ดำเนินการ) จะเป็น:

400 + 040 + 004และ010และ200

ที่เพิ่มขึ้นถึง 600 + 050 + 004 = 654

จากนั้นคุณสามารถเรียกใช้คำสั่ง

chmod +654 /path/to/file.extension เพื่อตั้งค่า

และเพื่อตั้งค่าการอนุญาตทั้งหมดคุณสามารถพิมพ์:

chmod +rwxrwxrwx /path/to/file.extension

หรือ (นี่ง่ายกว่าการเขียน แต่จำยากกว่ากัน):

chmod +777 /path/to/file.extension

ในที่สุดคุณสามารถทำได้:

chmod -777 /path/to/file.extension

เพื่อนำสิทธิ์ทั้งหมดออกไปจากทุกคน

และ:

chmod +300 /path/to/file.extension

ในการเพิ่มการอ่านและการเขียนสำหรับผู้ใช้โดยไม่ส่งผลกระทบต่อสิทธิ์อื่น ๆ (เช่นเรียกใช้งานสิทธิ์)

เว็บไซต์นี้มีช่องทำเครื่องหมายกริดเล็ก ๆ ที่มีประโยชน์มากโดยคุณสามารถทำเครื่องหมายตัวเลือกที่คุณต้องการและให้คำสั่งกับคุณ:

ป้อนคำอธิบายรูปภาพที่นี่

อย่างไรก็ตามไม่ใช่ชุดค่าผสมที่เป็นไปได้ทั้งหมดที่เหมาะสมที่จะใช้ หลักที่ใช้มีดังต่อไปนี้:

755 - Ownerมีทั้งหมดGroupและOtherสามารถอ่านและดำเนินการได้

700 - Ownerมีทั้งหมด

644 - Ownerสามารถอ่านและเขียนGroupและOtherสามารถอ่านได้

600 - Ownerสามารถอ่านและเขียนได้

และหากคุณใช้กลุ่มผู้ใช้ที่ไม่สำคัญ:

775 - Ownerสามารถอ่านและเขียนGroupและOtherสามารถอ่านได้

770 - OwnerและGroupมีทั้งหมดและOtherสามารถอ่านและดำเนินการได้

750 - Ownerมีทั้งหมดและGroupสามารถอ่านและดำเนินการได้

664 - OwnerและGroupสามารถอ่านและเขียนและOtherสามารถอ่านได้

660 - OwnerและGroupสามารถอ่านและเขียนได้

640 - Ownerสามารถอ่านและเขียนและGroupสามารถอ่านได้

ไม่ค่อยได้ใช้ 777 และ 666 ยกเว้นใน / tmp

ขอบคุณIlmari Karonen ที่ชี้ให้เห็นการใช้งานทั่วไป!


มันไม่ได้ขึ้นอยู่กับฐานแปด (8 ฐาน) แทนไบนารี (ตาม 2)? ในเลขฐานสองคุณสามารถมีเพียง 0 และ 1 ในขณะที่เลขฐานแปดคุณสามารถมี 0, 1, ... 6, 7
Justinas

@Justinas ไบนารีใน 7 = 4 + 2 + 1 - 111 แสดงถึงการอ่านและการเขียนและดำเนินการ
ทิม

8

วิ่ง:

chmod +x /path/to/file.sh

หากต้องการยกเลิกการปฏิบัติการให้รัน:

chmod -x /path/to/file.sh

ตัวอย่างเช่นฉันสร้าง.shไฟล์:

vi tester12.sh

หลังจากที่ฉันเขียนโค้ดลงบนตัวแก้ไข vi ฉันจะออกจากตัวแก้ไข vi:

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