Làm thế nào để thực thi một tập lệnh bash?


19

Vì vậy, tôi đã viết kịch bản bash đầu tiên của mình:

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

Tôi biết nó có vị trí thích hợp để bash và có thể thực thi được:

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

Bây giờ tôi muốn chạy nó từ dòng lệnh, nhưng tôi gặp lỗi:

$ myscript.sh
myscript.sh: command not found

Vì vậy, thay vì tôi thử điều này và nó hoạt động:

$ bash myscript.sh
hello world!

Đây có phải là cách tôi sẽ luôn luôn cần phải thực hiện nó? Tôi cảm thấy như tôi đã thực hiện các kịch bản khác mà không cần phải đi trước nó bash. Làm thế nào tôi có thể chạy myscript.sh mà không phải đi trước bash?

Cập nhật: Đây là một lời giải thích tốt về lý do và cách thực hiện một tập lệnh bash .

Câu trả lời:


28

Bạn phải làm cho tập tin thực thi. Bạn có thể làm điều đó với

chmod +x <filename>

Tên tập lệnh của bạn ở đâu và sau đó bạn phải thêm nó ./vào để hướng dẫn shell chạy một tệp trong thư mục cục bộ, như:

./script.sh

Bạn chỉ có thể chạy các tệp nằm trong PATHhoặc bạn chỉ định đường dẫn đến chúng. ./, thư mục cục bộ, không có trong PATHmặc định vì ai đó có thể sử dụng nó cho mục đích bất chính. Hãy tưởng tượng một tập lệnh được gọi là lsbị rơi trong một thư mục, bạn vào trong thư mục đó, chạy lsvà tập lệnh đó làm điều gì đó xấu.

Trong khi bạn đang ở đó, bạn có thể muốn làm cho nó dễ di chuyển hơn bằng cách chạy shell thay vì bash bằng cách sử dụng:

#!/bin/sh

hoặc bằng cách chạy bash bất kể nó được cài đặt ở đâu miễn là nó được cài đặt:

#!/usr/bin/env bash

Tôi đã thực hiện điều đó với chmod + x myscript.sh. Tôi đã làm sai?
Andrew

1
Có lẽ bạn đang thiếu ./ Tôi đã thêm nó vào câu trả lời.
Pupeno

1

Ngoài lời khuyên của Fernández, hãy đặt trước nó một điểm, như thế này:

./myscript.sh

Vì lý do bảo mật, thư mục hiện tại không bao giờ được bao gồm trong đường dẫn thực thi.


1

Có 3 cách để thực thi tập lệnh bash. Với ví dụ myscript.sh là tập lệnh bạn muốn thực thi.

Phương pháp 1

thực thi tập lệnh như một quy trình phụ, điều này sẽ kích hoạt các vấn đề về quyền nếu không phải là chủ sở hữu ghi. Bạn có thể thay đổi quyền bằng chmod.

$ chmod + x myscript.sh

$ ./myscript.sh

Phương pháp 2

chạy tập lệnh như một người dùng hiện tại. nếu tập lệnh bash được viết tốt, nó sẽ không có lỗi.

$ bash myscript.sh

Phương pháp 3

tương tự như phương pháp 2 nhưng cắt ngắn. lưu ý rằng điều này dựa trên giả định rằng bạn đang sử dụng bash shell trong phiên hiện tại.

$. myscript.sh

hi vọng điêu nay co ich!:)

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.