Cosa fa yes $ (yes yes)?


23

yesMi chiedevo che uso potesse essere il comando, mi sono imbattuto in questo commento e ho cercato di eseguire

yes $(yes yes)

Da quello che ho capito, questo dovrebbe semplicemente stampare una sequenza infinita di yes, ma invece non emette nulla e si blocca il mio terminale grafico dopo pochi secondi. (Se lo eseguo su tty1, vedo il prompt di accesso dopo qualche tempo.)

Cosa sta succedendo qui?


2
Non sono un esperto, ma potrebbe essere che la prima invocazione stia cercando di stampare infiniti infiniti. (o l'argomento potrebbe semplicemente essere troppo lungo.)
strugee

5
@strugee L'elenco degli argomenti non viene mai popolato, perché yesnon ritorna mai.
Chris Down,

@strugee Puoi ottenere "infiniti infiniti" usando xargs: yes yes | xargs -P 0 yes(o senza -P 0per l'infinito a processo singolo)
Kyle Strand

Risposte:


25

Dovrebbe già essere abbastanza per funzionare

 echo $(yes yes)

Il $(...)corre il comando interno fino a quando non è finito e cattura tutta la sua uscita. - Ora che yesfunziona da molto tempo e genera molto output, bash alla fine esaurirà la memoria e si arresterà in modo anomalo.


6

Per visualizzare il messaggio di errore che chiude la shell, è necessario eseguire una shell secondaria.

$ sh
$ kill -9 $$
Killed
$

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

1
16 milioni di gigabyte, eh? Gordon Moore è in agguato in un angolo
dicendo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.