Tôi sử dụng Makefile (với GNU chạy dưới Linux) để tự động hóa công việc grunt của tôi khi tái cấu trúc một tập lệnh Python. Kịch bản lệnh tạo tệp đầu ra và tôi muốn đảm bảo rằng tệp đầu ra vẫn không thay đổi khi đối mặt với các phép tái cấu trúc của tôi.Mã trạng thái vỏ trong thực hiện
Tuy nhiên, tôi không tìm thấy cách nào để lấy mã trạng thái của lệnh để ảnh hưởng đến trình bao tiếp theo nếu lệnh.
Nguyên tắc sau đây minh họa các vấn đề:
check-cond-codes:
diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$$!=
diff -q poalim report2008_4.csv; echo differences: =$$!=
Đầu tiên 'diff' so sánh hai tập tin bằng nhau, và điều thứ hai so sánh hai tập tin khác nhau. Đầu ra là:
diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$!=
no differences: ==
diff -q poalim report2008_4.csv; echo differences: =$!=
Files poalim and report2008_4.csv differ
differences: ==
Vì vậy, rõ ràng là '$$!' là biến sai để nắm bắt mã trạng thái của 'diff'. Thậm chí sử dụng SHELL: =/bin/bash khi bắt đầu Makefile không giải quyết được sự cố.
Biến trở về giá trị, mà tôi cần, sẽ (nếu tồn tại ở tất cả) được sử dụng trong lệnh 'if' trong quy tắc thực.
Việc thay thế việc tạo một kịch bản lệnh shell đặc biệt nhỏ thay cho việc viết tất cả các lệnh nội tuyến trong Makefile là không mong muốn, nhưng tôi sẽ sử dụng nó như một phương sách cuối cùng.
liên quan:
tôi không thể tìm thấy bất cứ điều gì về '$$' trong liên kết mà bạn cung cấp!. Bạn có thể vui lòng cụ thể hơn bằng cách sửa đổi URL và cung cấp cho người trực tiếp chỉ câu trả lời 'đến thứ 4 của Exit Shell Script dựa trên Process Exit Code' bằng cách sử dụng liên kết' share' bên dưới câu trả lời thứ 4 nếu nó vẫn ở vị trí thứ 4 vị trí – SebMa