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?


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.


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
$

1
16 juta gigabytes, eh? Gordon Moore bersembunyi di sudut pergi, "Yah ... Maksudku, tidak cukup belum ..."
Ferd
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.