Apa yang dilakukan yes $ (yes yes)?

23

Bingung apa gunanya yesperintah itu, saya menemukan komentar ini , dan mencoba untuk mengeksekusi

yes $(yes yes)

Dari apa yang saya pahami, ini seharusnya hanya mencetak urutan yang tak terbatas yes, tetapi sebaliknya tidak menghasilkan apa-apa dan crash terminal grafis saya setelah beberapa detik. (Jika saya menjalankannya pada tty1, saya melihat prompt login setelah beberapa waktu.)

Apa yang terjadi disini?

heinrich5991
sumber
2
Saya bukan ahli, tapi mungkin doa pertama mencoba mencetak hingga tak terbatas. (atau argumennya mungkin terlalu panjang.)
strugee
5
@strugee Daftar argumen tidak pernah diisi, karena yestidak pernah kembali.
Chris Down
@ strugee Anda bisa mendapatkan "infinity infinite times" menggunakan xargs: yes yes | xargs -P 0 yes(atau tanpa -P 0untuk proses tunggal tanpa batas)
Kyle Strand

Jawaban:

25

Seharusnya sudah cukup untuk dijalankan

 echo $(yes yes)

The $(...)menjalankan perintah batin sampai selesai dan menangkap semua outputnya. - Sekarang karena yesberjalan lama dan menghasilkan banyak output, bash pada akhirnya akan kehabisan memori dan crash.

michas
sumber
6

Untuk melihat pesan kesalahan yang menutup shell Anda, Anda perlu menjalankan sub-shell.

$ sh
$ kill -9 $$
Killed
$

$ sh
$ yes $(yes yes)
sh: xrealloc: cannot allocate 18446744071562067968 bytes
$
sourcejedi
sumber
1
16 juta gigabytes, eh? Gordon Moore bersembunyi di sudut pergi, "Yah ... Maksudku, tidak cukup belum ..."
Ferd