tôi có một kịch bản lệnh shell "script.sh" cho phép đầu ra là "thành công" hoặc "Không thành công" khi tôi thực thi trong cửa sổ unix. Bây giờ tôi muốn lưu đầu ra của script.sh vào một biến lệnh unix. say $a = {output of script.sh}
Làm thế nào để lưu trữ đầu ra của kịch bản lệnh shell thành một biến trong Unix?
Trả lời
Hai ví dụ đơn giản để nắm bắt sản lượng pwd
lệnh:
$ b=$(pwd)
$ echo $b
/home/user1
hoặc
$ a=`pwd`
$ echo $a
/home/user1
Cách thứ nhất được ưa thích. Lưu ý rằng không thể có bất kỳ dấu cách nào sau =
để tính năng này hoạt động.
Ví dụ sử dụng một kịch bản ngắn:
#!/bin/bash
echo "hi there"
thì:
$ ./so.sh
hi there
$ a=$(so.sh)
$ echo $a
hi there
Trong một cách tiếp cận linh hoạt hơn nói chung sẽ được trả lại một giá trị thoát khỏi lệnh và sử dụng nó để chế biến tiếp, mặc dù đôi khi chúng ta chỉ muốn nắm bắt đầu ra đơn giản từ một lệnh.
export a=$(script.sh)
Hy vọng điều này sẽ hữu ích. Lưu ý không có dấu cách giữa biến và =. Để echo đầu ra
echo $a
khi tập lệnh sẽ thực thi? sau khi gửi echo $ a? hoặc sau khi xuất khẩu? – logan
Tại sao bạn xuất 'a'? Bạn nên sử dụng dấu ngoặc kép quanh '$ a' trong câu lệnh' echo'. –
@login nó sẽ chạy script trong một subshell và đợi nó cho đến khi nó thoát, các luồng của subshell sẽ trỏ tới biến "a", nghĩa là mọi thứ chúng xuất ra sẽ được ghi vào biến thay vì đầu ra chuẩn của bạn main shell –
Bạn cần bắt đầu tập lệnh bằng dấu chấm trước, điều này sẽ đặt các biến đã xuất trong môi trường hiện tại.
#!/bin/bash
...
export output="SUCCESS"
Sau đó thực hiện nó như vậy
chmod +x /tmp/test.sh
. /tmp/test.sh
Khi bạn cần toàn bộ đầu ra và không chỉ là một giá trị duy nhất, chỉ cần đặt đầu ra trong một biến như câu trả lời khác chỉ ra
Không có lý do để "xuất" khi sử dụng nguồn. Ngoài ra, chỉ với một giá trị duy nhất, trạng thái thoát hoặc stdout có vẻ như chúng sẽ có ý nghĩa hơn. –
Bạn nên có thể viết lại kịch bản để trả về một giá trị thay vì xuất nó. Thay vì:
a=$(script.sh) # Now a is a string, either "success" or "Failed"
case "$a" in
success) echo script succeeded;;
Failed) echo script failed;;
esac
bạn sẽ có thể làm:
if script.sh > /dev/null; then
echo script succeeded
else
echo script failed
fi
Nó là đơn giản hơn nhiều cho các chương trình khác để làm việc với bạn kịch bản nếu họ không cần phải phân tích đầu ra. Đây là một thay đổi đơn giản để thực hiện. Chỉ cần exit 0
thay vì in success
và exit 1
thay vì in Failed
. Tất nhiên, bạn cũng có thể in các giá trị đó cũng như thoát với giá trị trả về hợp lý để các kịch bản lệnh bao bọc có tính linh hoạt trong cách chúng hoạt động với tập lệnh.
Như một lưu ý phụ, bạn sẽ muốn sử dụng 'success' và' failed' (lưu ý cách viết hoa nhất quán) trong bất kỳ mã thực nào, hoặc mọi thứ sẽ trở nên khó hiểu một cách nhanh chóng. –
Giả sử bạn muốn để lưu trữ các kết quả của một lệnh echo
echo hello
x=$(echo hello)
echo "$x",world!
đầu ra:
hello
hello,world!
@NitsanBaleli Đây là câu trả lời, không phải là câu hỏi – jean
- 1. Đầu ra lệnh của kịch bản lệnh Bash vào biến
- 2. Làm cách nào để thêm các giá trị trong một biến trong kịch bản lệnh shell của Unix?
- 3. Làm thế nào để lấy tên của nhánh git hiện tại thành một biến trong một kịch bản lệnh shell?
- 4. Làm thế nào để vượt qua một biến trong một lệnh curl trong kịch bản shell
- 5. Shell scripting, đầu ra lệnh lưu trữ trong biến và bảo quản định dạng
- 6. Làm thế nào để vượt qua một biến TỪ TỪ TỪ một kịch bản lệnh shell?
- 7. Làm thế nào để lưu trữ kết quả của một lệnh shell thực hiện trong một biến trong python?
- 8. Làm thế nào để bắt đầu một kịch bản shell trong một phút sau trong linux?
- 9. Làm thế nào để lưu trữ đầu ra của recv()?
- 10. Đầu ra của lệnh shell cuối cùng
- 11. Làm thế nào để xác định một kịch bản shell với số lượng đối số biến?
- 12. Làm thế nào để trả về đầu ra của thủ tục lưu trữ thành một biến trong máy chủ sql
- 13. Làm thế nào để áp dụng lệnh shell cho mỗi dòng của một đầu ra lệnh?
- 14. Có cách nào trong một kịch bản shell để tìm ra nơi đầu ra của nó được chuyển hướng?
- 15. Biến số tự động trong kịch bản lệnh shell
- 16. Trong kịch bản shell bash làm thế nào để chuyển đổi một chuỗi thành một số
- 17. Đầu ra ống từ lệnh shell đến tập lệnh python
- 18. Làm thế nào để thực thi một kịch bản lệnh shell từ C trong Linux?
- 19. Làm thế nào để tạo một hàm trong kịch bản lệnh shell nhận các tham số?
- 20. Gán đầu ra của lệnh hệ thống thành biến
- 21. Làm thế nào để làm cho chuyển hướng đầu ra shell (>) viết trong khi kịch bản vẫn đang chạy?
- 22. Tìm và thay thế trong kịch bản lệnh shell
- 23. Làm thế nào để gán đầu ra của lệnh Bash cho một biến?
- 24. Làm thế nào tôi có thể lưu trữ đầu ra chức năng hệ thống của Perl thành một biến?
- 25. Kịch bản lưu trữ SQL
- 26. Cách tốt nhất để đọc đầu ra của lệnh shell
- 27. Làm thế nào để chạy kịch bản shell trong R và nhận được đầu ra vào bảng?
- 28. Làm thế nào để viết kịch bản lệnh shell để tìm số trang trong PDF?
- 29. Làm thế nào để chạy một kịch bản lệnh shell trên một giao diện điều khiển Unix hoặc thiết bị đầu cuối Mac?
- 30. Làm cách nào để chuyển hướng đầu ra của toàn bộ tập lệnh shell trong tập lệnh?
thể trùng lặp của [shell script không thể lưu đầu ra từ dòng lệnh vào biến] (http:// stackoverflow.com/questions/10487379/shell-script-can-not-save-output-from-command-line-in-biến) –
Khá giống với [đầu ra lệnh chuyển hướng thành đầu ra biến đổi và tiêu chuẩn trong ksh] (http://stackoverflow.com/questions/7901568/redirect-command-output-into-variable-and-standard-output-in-ksh) –