Có $ (có có) làm gì?


23

Tự hỏi sử dụng yeslệnh này có thể là gì, tôi tình cờ nhận xét này và cố gắng thực thi

yes $(yes yes)

Theo những gì tôi hiểu, điều này chỉ đơn giản là in ra một chuỗi vô tận yes , nhưng thay vào đó, nó không tạo ra gì và làm hỏng thiết bị đầu cuối đồ họa của tôi sau vài giây. (Nếu tôi thực thi nó trên tty1, tôi sẽ thấy dấu nhắc đăng nhập sau một thời gian.)

Có chuyện gì ở đây vậy?


2
Tôi không phải là một chuyên gia, nhưng có thể là lời mời đầu tiên đang cố in vô số lần vô hạn. (hoặc cuộc tranh luận có thể đơn giản là quá dài.)
strugee

5
@strugee Danh sách đối số không bao giờ được điền, vì yeskhông bao giờ trả về.
Chris Xuống

@strugee Bạn có thể nhận được "thời gian vô hạn" bằng cách sử dụng xargs: yes yes | xargs -P 0 yes(hoặc không có -P 0vô hạn một quá trình)
Kyle Strand

Câu trả lời:


25

Nó đã đủ để chạy

 echo $(yes yes)

Lệnh $(...)chạy bên trong cho đến khi hoàn thành và nắm bắt tất cả đầu ra của nó. - Bây giờ khi yeschạy một thời gian dài và tạo ra rất nhiều đầu ra, bash cuối cùng sẽ hết bộ nhớ và sụp đổ.


6

Để xem thông báo về lỗi đóng vỏ của bạn, bạn cần chạy một vỏ phụ.

$ sh
$ kill -9 $$
Killed
$

$ sh
$ yes $(yes yes)
sh: xrealloc: cannot allocate 18446744071562067968 bytes
$

1
16 triệu gigabyte, hả? Gordon Moore đang ẩn nấp trong một góc đi, "Vâng ... Ý tôi là, không hoàn toàn chưa ..."
Vụ KTĐN
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.