Set -e làm gì?


28

Tôi có một tập lệnh mà tôi đã tìm thấy và tôi đang cố gắng để nó chạy, nó chỉ tải xuống và cài đặt các thư viện thời gian chạy Apache. Dòng đầu tiên là set -evà nó gây ra lỗi; những gì set -elàm gì?

Câu trả lời:


22

Nội dung này phức tạp đến mức nó xứng đáng với phần riêng của nó.

set cho phép bạn thay đổi các giá trị của các tùy chọn shell và đặt các tham số vị trí hoặc để hiển thị tên và giá trị của các biến shell.

các -etùy chọn

-e

Thoát ngay lập tức nếu một đường ống (xem Pipelines), có thể bao gồm một lệnh đơn giản (xem Lệnh đơn giản), lệnh con được đặt trong dấu ngoặc đơn (xem Nhóm lệnh) hoặc một trong các lệnh được thực thi như một phần của danh sách lệnh được bao quanh bởi dấu ngoặc nhọn (xem Nhóm lệnh) trả về trạng thái khác không. Shell không thoát nếu lệnh bị lỗi là một phần của danh sách lệnh ngay sau một thời gian hoặc cho đến khi từ khóa, một phần của kiểm tra trong câu lệnh if, một phần của bất kỳ lệnh nào được thực thi trong && hoặc || liệt kê ngoại trừ lệnh theo lệnh cuối cùng && hoặc ||, bất kỳ lệnh nào trong đường ống ngoại trừ lệnh cuối cùng hoặc nếu trạng thái trả về của lệnh đang được đảo ngược với !. Một cái bẫy trên ERR, nếu được đặt, được thực thi trước khi thoát khỏi shell.

Tùy chọn này áp dụng cho môi trường shell và từng môi trường lớp con riêng biệt (xem Môi trường thực thi lệnh) và có thể khiến các lớp con thoát ra trước khi thực hiện tất cả các lệnh trong lớp con.

Nguồn: www.gnu.org

Đã chỉnh sửa do nhận xét của @ psus bên dưới.

Ngoài ra, bạn có thể đọc trang hướng dẫn của bash

man bash 

tại phần: SHELL BUILTIN THÔNG TIN

hoặc vấn đề

help set 

cho một tin nhắn trợ giúp ngắn.


1
Vì nó là một lệnh dựng sẵn, bạn muốn help setvà hướng dẫn bash đầy đủ là info bash, nếu bạn đã cài đặt bash-doc.
psusi

Cảm ơn đã làm rõ @psusi. help setvà / hoặc man bashlà những người chính xác cho set.
NickTux

12

set -e Nói tóm lại, khi nó ở đầu tập lệnh bash của bạn, hãy yêu cầu tập lệnh thoát ngay khi bất kỳ dòng nào trong tập lệnh bị lỗi (với một số ngoại lệ được liệt kê trong hướng dẫn sử dụng.) [1]

Là một tùy chọn gỡ lỗi, nó thường được sử dụng set -x, đó là in từng dòng lệnh được mở rộng trước khi thực hiện bằng dấu "+". [2]

Tìm hiểu thêm tại:

[1] https://www.peterbe.com/plog/set-ex

[2] http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html


2
Cảm ơn đã giải thích đơn giản. Tôi thường thấy set -xe trong Dockerfiles và bây giờ tôi biết lý do :)
ymakux
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.