Cách tạo tệp (ví dụ: tập lệnh .sh) có thể thực thi được, để có thể chạy tệp từ thiết bị đầu cuối


245

Tôi có một tập tin script.sh và loại tập tin này là tập tin shellscript. Tôi muốn tạo tệp này dưới dạng tệp ứng dụng / x-thực thi. Làm thế nào tôi có thể làm cho nó?




Nó không phải là một bản sao, bởi vì tôi đã hỏi cụ thể về việc làm cho ứng dụng / x-thực thi được. Các câu hỏi khác chỉ yêu cầu mở tập tin sh trong thiết bị đầu cuối.
Ziyaddin Sadigov

Câu trả lời:


326

Bạn có thể đánh dấu tệp là tệp thực thi:

chmod +x filename.sh

Sau đó bạn có thể thực hiện nó như thế này:

./filename.sh

Nếu bạn muốn sử dụng một lệnh khác để bắt đầu nó, bạn có thể thêm một bí danh:

gedit ~/.bashrc

Thêm phần này vào cuối tập tin:

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

Mở một phiên thiết bị đầu cuối mới hoặc nhập source ~/.bashrcvào thiết bị đầu cuối của bạn để áp dụng. Sau đó, chỉ cần sử dụng tên mới để bắt đầu kịch bản.


Bạn có biết cách sử dụng lệnh sudo sau khi nhập lệnh như: "alias lệnh1 = '/home/user_name/dir/script.sh'. Trong tôi, nó hoạt động mà không có sudo, nhưng không phải với nó.
Aditya

Bạn cần khởi động lại bash sau khi chỉnh sửa .bashrc run: exec bash để khởi động lại bash.
Sampath Perera

2
Tại sao các tập tin thực thi được ./filename.shvà không chỉ filename.sh?
user1993

@ user1993 có, tôi cũng đang tìm cách để làm cho nó có thể thực thi được ngay filenamevà không./filename
MycrofD

@ user1993 Nói chung, sử dụng ./filename.shchỉ định một tệp trong thư mục hiện tại và sử dụng filename.shchỉ định một tệp trong thư mục hiện tại hoặc bất kỳ thư mục nào của PATH. Việc sử dụng đầu tiên loại bỏ bất kỳ sự không chắc chắn nào về việc tập tin nào được truy cập. Trong trường hợp này, bạn đang cố gắng thực thi tập lệnh bằng bash hoặc trình thông dịch khác (theo giả định #!/bin/bashlà dòng đầu tiên trong tập lệnh của bạn) chỉ bằng cách nhập tên tệp. Việc sử dụng này yêu cầu thư mục được chỉ định. Ngoài ra, bạn có thể thử bash filename.shdường như hoạt động với thư mục không xác định.
a505999

37

Có hai cách để tạo một tệp thực thi:

Phương pháp GUI:

Chuyển đến tab quyền, sau đó đánh dấu vào ô `Thực thi: [] Cho phép thực thi tệp dưới dạng chương trình.

nhập mô tả hình ảnh ở đây

Phương thức Terminal / Command:

Bạn có thể sử dụng:

cd /to/my/required/directory

Sau đó chạy

chmod +x filename.extension

Hoặc chỉ cần chạy:

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

chmod cũng có một số tùy chọn nâng cao hơn:

Các không gian là để hiển thị rằng nó được chia ra: - rwx --- ---

Bộ đầu tiên ---là Người dùng. Thứ hai là Nhóm và cuối cùng là Khác (bất kỳ ai khác)

r là viết tắt của Đọc, w cho Viết và x cho eXecute.

Vì vậy, để cho phép mọi người đọc nó, nhưng chỉ Nhóm thực thi và Người dùng đọc và viết nó (nhưng vì lý do nào đó không thực thi) sẽ là:

-rw- rx- r-- Nhưng điều này sẽ được thêm vào lệnh như:

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

chmodcũng có thể làm điều này với số lượng. Nó dựa trên nhị phân (tôi nghĩ, vì nó là 1,2 và 4)

Vì vậy, có những con số:

Thực thi bởi người dùng là 100. Thực hiện theo nhóm là 010. Thực thi bởi khác là 001

Viết bởi người dùng là 200. Viết theo nhóm là 020. Viết bởi khác là 002.

Đọc bởi người dùng là 400. Đọc theo nhóm là 040. Đọc bởi khác là 004.

Sau đó, bạn thêm những thứ này lại với nhau để có được sự kết hợp mong muốn.

Vì vậy, để cho phép mọi người đọc nó, nhưng chỉ Nhóm thực thi và Người dùng viết nó (nhưng vì một số lý do không thực thi) sẽ là:

400 + 040 + 004010200

Điều đó thêm tới 600 + 050 + 004 = 654.

Sau đó bạn có thể chạy lệnh.

chmod +654 /path/to/file.extension để thiết lập nó.

Và để đặt tất cả các quyền, bạn có thể nhập:

chmod +rwxrwxrwx /path/to/file.extension

Hoặc (cái này dễ viết hơn một chút, nhưng khó nhớ hơn từng cái một):

chmod +777 /path/to/file.extension

Cuối cùng, bạn có thể làm:

chmod -777 /path/to/file.extension

Để lấy tất cả các quyền từ mọi người.

Và:

chmod +300 /path/to/file.extension

Để thêm đọc và viết cho người dùng, mà không ảnh hưởng đến bất kỳ quyền nào khác (ví dụ: Thực thi quyền).

Trang web này có một hộp kiểm lưới nhỏ rất hữu ích, theo đó bạn có thể đánh dấu vào các tùy chọn bạn muốn và nó cung cấp cho bạn lệnh:

nhập mô tả hình ảnh ở đây

Tuy nhiên, không phải tất cả các kết hợp có thể là hợp lý để sử dụng; những cái chính được sử dụng là như sau:

755 - Ownercó tất cả, GroupOthercó thể đọc và thực thi

700 - Ownercó tất cả

644 - Ownercó thể đọc và viết, GroupOthercó thể đọc

600 - Ownercó thể đọc và viết

Và, nếu bạn đang sử dụng các nhóm người dùng không tầm thường:

775 - Ownercó thể đọc và viết, GroupOthercó thể đọc

770 - OwnerGroupcó tất cả, và Othercó thể đọc và thực thi

750 - Ownercó tất cả, và Groupcó thể đọc và thực thi

664 - OwnerGroupcó thể đọc và viết, và Otherchỉ có thể đọc

660 - OwnerGroupcó thể đọc và viết

640 - Ownercó thể đọc và viết, và Groupcó thể đọc

777 và 666 hiếm khi được sử dụng, ngoại trừ trong / tmp.

Cảm ơn Ilmari Karonen cho chỉ ra những áp dụng phổ biến!


Không phải nó dựa trên bát phân (8 cơ sở) thay vì nhị phân (dựa trên 2) sao? Trong nhị phân, bạn chỉ có thể có 0 và 1, trong khi ở bát phân, bạn có thể có 0, 1, ... 6, 7
Justinas

@Justinas nhị phân trong đó 7 = 4 + 2 + 1 - 111 đại diện cho Đọc và Viết và Thực thi.
Tim

8

Chạy:

chmod +x /path/to/file.sh

Để làm cho nó không thể thực thi được, hãy chạy:

chmod -x /path/to/file.sh

Ví dụ tôi đã tạo .shtập tin:

vi tester12.sh

Sau khi tôi viết một số mã trên trình soạn thảo vi, tôi sẽ thoát khỏi trình soạn thảo vi:

:wq!
chmod +x tester12.sh
./tester12.sh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.