2010-02-22 69 views
5

Tôi có tập lệnh bash trong đó tôi kiểm tra mã thoát của lệnh chạy cuối cùng bằng cách sử dụng $? biến nhưng bây giờ tôi đang thực hiện một chương trình C (từ kịch bản đó) mà trả về 0 nếu chương trình được thực hiện thành công. Có cách nào tôi có thể bắt giá trị trả về của chương trình C từ trong kịch bản bash của tôi?Kiểm tra giá trị trả về của chương trình C trong tập lệnh bash?

Tôi tin rằng các lệnh khác nhau như awk, sed, vv được viết bằng C. Làm cách nào để sử dụng $? để lưu trữ mã thoát của chúng trong đó? Làm thế nào tôi có thể làm cho chương trình C của tôi để lưu trữ mã thoát của nó trong $ ??

Tôi hy vọng câu hỏi của tôi là rõ ràng.

Trả lời

11

Không cần phải làm gì cả - nếu chương trình C của bạn trả về 0, đó là những gì sẽ được lưu trữ trong biến số $? của trình bao đã thực thi nó.

+0

Trạng thái thoát được giới hạn ở chỉ 8 bit, vì vậy chỉ 8 bit thấp nhất của những gì chương trình trả về sẽ kết thúc được lưu trong $? –

+0

@Chris Dodd - POSIX giới hạn giá trị trả lại từ 0 - 255, do đó, dung lượng 8 bit không phải là vấn đề ở đó, đó là tối ưu hóa. –

1

bash bắt mã thoát trong $? tự động. Hoặc bạn chỉ có thể sử dụng lệnh trong if nếu bạn chỉ quan tâm đến số không/không khác.

1

Mã trả về của chương trình C là giá trị được trả về bởi hàm int main() hoặc đối số của hàm exit(). Hệ thống sau đó làm cho nó có sẵn cho quá trình cha mẹ của nó thông qua các cuộc gọi hệ thống wait(). Khi quá trình gốc là bash, giá trị này sau đó được cung cấp thông qua biến số $?.

+0

Điều gì khiến bạn nghĩ rằng errno có liên quan? –

+0

Tôi giả định rằng một quá trình mới được tạo ra với 'fork()' và trang người đàn ông của nó đề cập đến điều đó. Liệu tôi có sai? – mouviciel

+0

Vâng, Windows (mà tôi sử dụng bash) không có fork(). Và trong hơn 25 năm lập trình UNIX, tôi chưa bao giờ thấy bất kỳ gợi ý nào mà errno được kết hợp với giá trị thoát của quá trình. Tôi không nói bạn sai, nhưng tôi cần chương và câu trước khi nói rằng bạn đúng. –

Các vấn đề liên quan