Chuyển hướng đầu ra sang một biến?


9

Tôi thú vị trong việc điều hướng đầu ra từ hai lệnh đến một biến. Tôi không muốn đầu ra được hiển thị trên màn hình mà thay vào đó được gán cho một biến trong tập lệnh của tôi để tôi có thể sử dụng lại.

những gì tôi đang làm là lấy kích thước tệp từ một thư mục bằng cách sử dụng các lệnh nhìn thấy bên dưới:

ls -l /var/spool | wc -c

Lệnh này cho tôi kích thước tệp theo byte và hiển thị đầu ra dưới dạng một số nguyên. Tôi quan tâm đến việc lấy số nguyên này được gán cho một biến theo ý thích của tôi để tôi có thể so sánh nó với một biến khác sau

Điều này dường như không hoạt động:

size = ls -l /var/spool | wc -c

Chuyển hướng sẽ làm việc?

Như thế này....

ls -l /var/spool | wc -c > size

Dù bằng cách nào tôi cũng muốn đầu ra số này được gán cho một biến và không được hiển thị trên màn hình.

Mọi góp ý đều rất hoan nghênh!

Câu trả lời:


12

Có vẻ khá đơn giản.

romano@RRyS:~$ size=$(ls -l /var/spool | wc -c)
romano@RRyS:~$ echo $size
476

Cú pháp shell $(command)thực thi commandvà trả về đầu ra tiêu chuẩn: chỉ cần lưu nó trong một biến.

Lệnh của bạn:

ls -l /var/spool | wc -c > size 

sẽ tạo một tệp có tên sizetrong thư mục hiện tại (chứa số và dòng mới).


hoặc trích dẫn lại lệnh : size=`ls -l /var/spool | wc -c`. sử dụng định dạng này trong câu trả lời của bạn: "` `size =` ls -l / var / spool | wc -c` `` "không có dấu ngoặc kép;)
αғsнιη

1
@KasiyA Tôi thích sử dụng $()vì những lý do được giải thích ở đây: stackoverflow.com/a/9449788/2907484 :-)
Rmano

1
(1) Sau khi làm ls -l /var/spool | wc -c > size_file, bạn có thể read size_var < size_file. (2) Xem thêm $ () có thể luôn thay thế backticks để thay thế lệnh không?
G-Man nói 'Phục hồi Monica'

6

Tôi thích giải pháp được cung cấp bởi câu trả lời của Rmano , nhưng nếu bạn chỉ muốn sử dụng chuyển hướng:

read size < <(ls -l /var/spool | wc -c)

1
Lợi ích chính của việc sử dụng chỉ chuyển hướng là nó không nuốt lỗi (tùy thuộc vào cách bạn có kịch bản của bạn thiết lập cho chế biến ống - set -e, set -o pipefail, vv). Vì vậy, nếu bạn sử dụng $(…)tập lệnh của mình sẽ luôn tiếp tục, trong khi với chuyển hướng, nó có thể được thiết lập thành thất bại. (có thể là những gì bạn muốn, hoặc không).
Garrett Motzner 27/12/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.