Điểm:4

Cách ẩn đầu ra của lệnh đầu tiên khi sử dụng || nhà điều hành và thoát?

lá cờ cn

Điều này ẩn đầu ra từ lệnh đầu tiên và in Ối thành stderr nếu nó không thành công. Càng xa càng tốt.

#!/usr/bin/env bash
invalid_command > /dev/null 2>&1 || >&2 tiếng vang "Rất tiếc"
lặp lại lời chào

Điều đó xuất ra điều này:

Ối
Chào

Nhưng tôi cần thoát cũng như in một thông báo nếu lệnh đầu tiên không thành công. Vì vậy, tôi đã thử sử dụng dấu ngoặc đơn.

#!/usr/bin/env bash
invalid_command > /dev/null 2>&1 || ( >&2 tiếng vang "Rất tiếc"; thoát )
lặp lại lời chào

Đây là đầu ra của điều đó:

Ối
Chào

Nhưng bây giờ các lối ra không hoạt động vì nó đang hoạt động trong một lớp con, khiến nó được in Chào, mặc dù tôi muốn thoát tập lệnh.

Vì vậy, làm thế nào để tôi có được Bash để tiếng vang một số văn bản và thoát nếu một lệnh cụ thể không thành công bằng cách sử dụng || nhà điều hành? Tôi biết rằng tôi có thể sử dụng một nếu một lớp lót để làm điều đó, nhưng tôi không muốn phải sử dụng đầy đủ nếu tuyên bố nếu tôi có thể tránh nó.

#!/usr/bin/env bash
if [ "$(invalid_command > /dev/null 2>&1 ; printf $?)" != "0" ]; sau đó >&2 echo 'Rất tiếc' ; thoát 1; fi
lá cờ cn
`[` là một lệnh đánh giá một biểu thức và đặt mã thoát riêng của nó một cách thích hợp, sau đó được sử dụng bởi câu lệnh `if`. Bạn cũng có thể viết `if ! invalid_command >/dev/null 2>&1; sau đó lặp lại >&2 Rất tiếc; lối ra; fi`.
Điểm:9
lá cờ sd

Sử dụng nhóm lệnh (chú ý các ; vào cuối lối ra).

#!/usr/bin/env bash
invalid_command > /dev/null 2>&1 || { >&2 tiếng vang "Rất tiếc" ; lối ra; }
lặp lại lời chào

Trả lại cái này trên thiết bị đầu cuối của tôi.

$ ./test.sh 
Ối

Nếu bạn có nhiều lệnh, bạn có thể bẫy tất cả các lỗi.

#!/usr/bin/env bash
on_error() {
    >&2 tiếng vang "Rất tiếc"
    thoát 1
}
bẫy 'on_error' ERR
invalid_command > /dev/null 2>&1
lặp lại lời chào

Điều này sẽ in Ối và thoát ngay lập tức, nếu bất kỳ lệnh nào trên tập lệnh bị lỗi.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.