2013-05-02 27 views
14

Tôi có hai tập lệnh Bash. Các tập lệnh mẹ gọi các chỉ số để thực hiện một số hành động và trả về một giá trị. Làm thế nào tôi có thể trả về một giá trị từ subscript cho kịch bản mẹ? Thêm một số return vào chỉ số và bắt được giá trị trong phụ huynh không hoạt động.Bash - Giá trị trả về từ chỉ số tới tập lệnh mẹ

+1

Hãy xem câu trả lời này từ ngày hôm qua: http://stackoverflow.com/a/16325765/1983854 - nó có thể giúp rất nhiều – fedorqui

Trả lời

24

Tôi giả sử các tập lệnh này đang chạy trong hai quy trình khác nhau, tức là bạn không "tìm nguồn cung ứng" một trong số chúng.

Tùy thuộc vào những gì bạn muốn trả lại. Nếu bạn chỉ muốn trả lại mã thoát từ 0 đến 255 thì:

# Child (for example: 'child_script') 
exit 42 


# Parent 
child_script 
retn_code=$? 

Nếu bạn muốn trả về chuỗi văn bản, bạn sẽ phải thực hiện điều đó thông qua stdout (hoặc tệp). Có một số cách để chụp đó, đơn giản nhất là:

# Child (for example: 'child_script') 
echo "some text value" 

# Parent 
retn_value=$(child_script) 
+1

Phương thức echo có trả về mọi thứ được lặp lại bởi tập lệnh con hay chỉ dòng cuối cùng? –

+0

@AakilFernandes: trong trường hợp này, 'echo' viết dòng cho nó:" một số giá trị văn bản "trong ví dụ. Tuy nhiên, cha mẹ là bắt tất cả các đầu ra tiêu chuẩn từ đứa trẻ, cho dù nó đến từ một 'echo' hay không. Đó có thể là nhiều dòng được phân cách bằng dòng mới '$ '\ n'' – cdarke

-3

trả lại giá trị từ chỉ số và kiểm tra biến $? chứa giá trị trả lại

+1

"Return" không rõ ràng ở đây, vì câu lệnh 'return' chỉ có thể được sử dụng để trả về từ một hàm, không phải là một tập lệnh. Để chính xác, bạn cần sử dụng câu lệnh 'exit' để trả về từ tập lệnh. – chepner

+1

@chepner: thực sự 'return' cũng có thể được sử dụng từ tệp" có nguồn gốc "(' .' hoặc 'source'), nhưng sau đó là một tập lệnh? – cdarke

+0

Ah, phức tạp. Tôi đoán câu trả lời đúng sau đó là "sử dụng' return' hoặc 'exit' khi thích hợp". – chepner

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