Tôi mới làm kịch bản lệnh shell. Tôi muốn gọi một danh sách tạo các tập tin từ Shell script theo một thứ tự cụ thể. Đối với mỗi makefile tôi muốn có được kết quả (thực hiện thành công hay thất bại). Nếu có bất kỳ lỗi nào tôi muốn dừng việc thực thi tập lệnh. Nếu thành công, tôi phải chạy makefile tiếp theo.Gọi makefiles từ Shell Script
Trả lời
Thành ngữ phổ biến là tạo tập lệnh shell với set -e
; điều này sẽ khiến cho tập lệnh thoát khỏi lỗi đầu tiên.
#!/bin/sh
set -e
make -f Makefile1
make -f Makefile2
:
Nếu bạn cần kiểm soát nhiều hơn kịch bản tổng thể, có thể loại bỏ set -e
và thay vào đó một cách rõ ràng lối ra make
thất bại:
make -f Makefile1 || exit
make -f Makefile2 || exit
Để giảm sự trùng lặp mã, tạo ra một vòng lặp:
for f in Makefile1 Makefile2; do
make -f "$f" || exit
done
Chỉ cần rõ ràng, các kết nối ||
"hoặc" và &&
"và" là viết tắt cho
if make -f Makefile1; then
: "and" part
else
: "or" part
fi
Cuối cùng, hành vi bạn mô tả âm thanh chính xác như cách hoạt động của chính nó. Có lẽ một Makefile cấp cao nhất thực sự sẽ là một giải pháp thích hợp cho kịch bản của bạn?
.PHONY: all
all:
$(MAKE) -f Makefile1
$(MAKE) -f Makefile2
make -f makefile1
make -f makefile2
để chạy tạo file ảnh theo thứ tự
để tiết kiệm đầu ra của mỗi makefile
make -f makefile1 >> output1
make -f makefile2 >> output2
để kiểm tra kết quả sau mỗi lần làm cho tập tin
make -f makefile1 >> output1
sau khi kịch bản dòng này sử dụng
echo $? điều này kết hợp với nếu. nếu echo $? kết quả bằng không thì thành công của bạn nên nếu echo $? kết quả bằng không, sau đó chạy tệp tiếp theo theo lối ra khôn ngoan khác
Cũng có thể hữu ích khi cũng ghi lại các lỗi, tức là 'make -f makefile1 & >> output1' – pfnuesel
Giống như 'make1 && make2 && make3'? – pfnuesel
Hoặc 'make -f makefile1 && make -f makefile2 && ...' – devnull