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.