yes $(yes yes)は何をしますか?


23

yesコマンドを使用するものを疑問に思って、私はこのコメントにつまずいて、実行しようとしました

yes $(yes yes)

私が理解していることから、これは単に無限のシーケンスをyes出力するはずですが、代わりに何も出力せず、数秒後にグラフィカル端末をクラッシュさせます。(tty1で実行すると、しばらくするとログインプロンプトが表示されます。)

ここで何が起きてるの?


2
私は専門家ではありませんが、最初の呼び出しは無限の回数を印刷しようとしている可能性があります。(または、引数が単純に長すぎる可能性があります。)
strugee

5
@strugee yes返されないため、引数リストは入力されません。
クリスダウン

あなたが「無限無限回」を使用して取得することができます@strugee xargsyes yes | xargs -P 0 yes(またはなしの-P 0シングルプロセス無限大)
カイルストランド

回答:


25

すでに実行するのに十分なはずです

 echo $(yes yes)

$(...)それは、すべての出力を終了し、キャプチャされるまで、内部コマンドを実行します。- yes長時間実行して大量の出力を生成するようになったため、bashは最終的にメモリ不足になりクラッシュします。


6

シェルを閉じるエラーのメッセージを表示するには、サブシェルを実行する必要があります。

$ sh
$ kill -9 $$
Killed
$

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

1
1600万ギガバイトですよね?ゴードン・ムーアが「まあ...私はなく、かなり、意味、行くの隅に潜んされて ...」
FeRD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.