Điểm:-2

Đường ống của tôi không hoạt động trong câu lệnh if của tôi

lá cờ cn

Tôi có kịch bản này để kiểm tra trạng thái git cho tất cả các kho lưu trữ của tôi:


tìm / -type d -name .git 2>&- | 
trong khi đọc gitFolder; làm
    nếu [[ $gitFolder == *"/Temp/"* ]]; sau đó
        tiếp tục;
    fi
    if [[ $gitFolder == *"/Thùng rác/"* ]]; sau đó
        tiếp tục;
    fi
    if [[ $gitFolder == *"/opt/"* ]]; sau đó
        tiếp tục;
    fi
    cha mẹ=$(tên thư mục $gitFolder);
    if [[ `git -C $parent status --porcelain` ]]; sau đó
        tiếng vang "";
        tiếng vang $cha mẹ;
        git -C $parent status --porcelain
    khác nếu [[ $(git -C $parent status | grep phía trước) ]]; sau đó
        tiếng vang "";
        echo "$parent chưa được đẩy";
    fi
xong 

Nhưng nó không hoạt động. Nếu tôi loại bỏ thứ hai khối khác sau đó nó hoạt động.

Về cơ bản, tôi muốn biết liệu kho lưu trữ git có bất kỳ thay đổi nào không (nếu đầu tiên) hoặc nếu nó đi trước chính (nếu thứ hai).

Tôi nên thay đổi điều kiện thứ hai đó như thế nào?

lá cờ hr
Vui lòng cố gắng mô tả nhiều hơn là "không hoạt động" - điều gì sẽ xảy ra và thay vào đó điều gì sẽ xảy ra?
Lorenz Keel avatar
lá cờ gr
Thay thế `else if` bằng `elif`. Tôi chưa kiểm tra mã để biết các lỗi khác có thể xảy ra
Điểm:2
lá cờ gr

Cú đánh nếu...khác nếu...khác tuyên bố có dạng sau:

nếu ĐIỀU KIỆN1; sau đó
  TUYÊN BỐ1
elif ĐIỀU KIỆN1; sau đó
  TUYÊN BỐ2
khác
  BÁO CÁO3
fi

Lỗi cụ thể trong tập lệnh của bạn là việc sử dụng từ khóa không chính xác khác nếu thay vì đúng yêu tinh.

Nếu CONDITION1 đánh giá là True, STATEMENTS1 sẽ được thực thi. Nếu CONDITION2 đánh giá là True, STATEMENTS2 sẽ được thực thi. Nếu không có lệnh kiểm tra nào đánh giá là True, CONDITION3 được thực thi.

Các điều kiện được đánh giá tuần tự. Khi một điều kiện trả về True, các điều kiện còn lại không được thực hiện và điều khiển chương trình sẽ di chuyển đến cuối câu lệnh if.

Bạn có thể có một hoặc nhiều mệnh đề elif trong câu lệnh.

Gợi ý: bạn có thể cài đặt kiểm tra vỏ sò gói để kiểm tra mã bash của bạn. Nhìn thấy https://github.com/koalaman/shellcheck để tham khảo.

Điểm:-1
lá cờ in

Hãy thử thay thế

    khác nếu [[ $(git -C $parent status | grep phía trước) ]]; sau đó

với

    khác nếu git -C $parent status | đi trước; sau đó

Bạn cũng có thể muốn thêm -q để chào.

Điều này hoạt động bằng cách thay thế các [[ kiểm tra với một lệnh trần trụi. Lệnh cuối cùng trong đường ống (tiếng kêu) thoát với giá trị đúng hoặc sai, tùy thuộc vào việc nó có tìm thấy gì hay không. Các -q tùy chọn yêu cầu nó chỉ trả về với giá trị đó và không thực sự in những gì nó tìm thấy.

Lưu ý: có những lỗi khác trong tập lệnh của bạn cũng cần sửa.

Saeed Neamati avatar
lá cờ cn
Tôi không hiểu nó. Đâu là **kiểm tra** trong dòng thứ hai? Có vẻ như JavaScript.
Saeed Neamati avatar
lá cờ cn
Đã không làm việc. Cung cấp cho tôi lỗi cú pháp. Gần `xong`.
terdon avatar
lá cờ cn
@SaeedNeamati vui lòng không cho chúng tôi biết "không hoạt động" hoặc "lỗi cú pháp". Chỉnh sửa câu hỏi của bạn và cho chúng tôi biết bạn gặp phải lỗi _exact_ nào. Chúng tôi không thể chỉ đoán những gì bạn cần.
Saeed Neamati avatar
lá cờ cn
@terdon, tôi đã viết lỗi. `Lỗi cú pháp, gần xong`. Tôi quản lý để làm cho nó hoạt động bằng cách thay đổi cách tiếp cận.
user10489 avatar
lá cờ in
Bạn sẽ cần kết hợp nhiều câu trả lời ở đây để có được giải pháp hiệu quả vì bạn có nhiều lỗi. Lỗi gần xong là thiếu một hoặc nhiều `fi` để đóng `if` của bạn. Hoặc thay thế `else if` bằng `elif`
lá cờ lu
`elif` là con đường để đi.
user10489 avatar
lá cờ in
Tôi đã nghĩ elif là một tính năng bash, nhưng có vẻ như POSIX đã thêm nó khi tôi không tìm kiếm hay gì đó. Ngoài ra, có lẽ không có vấn đề gì với khả năng tương thích ngược và `elif` có vẻ như là con đường để đ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.