क्या $ हाँ (हाँ हाँ) करता है?


23

आश्चर्य है कि yesकमांड का उपयोग क्या हो सकता है, मैंने इस टिप्पणी पर ठोकर खाई , और निष्पादित करने का प्रयास किया

yes $(yes yes)

मुझे जो समझ में आया है, उसे बस एक अनंत अनुक्रम का प्रिंट आउट लेना चाहिए yes, लेकिन इसके बजाय यह कुछ भी नहीं करता है और कुछ सेकंड के बाद मेरे चित्रमय टर्मिनल को क्रैश करता है। (यदि मैं इसे tty1 पर निष्पादित करता हूं, तो मुझे कुछ समय बाद लॉगिन प्रॉम्प्ट दिखाई देता है।)

यहाँ क्या हो रहा है?


2
मैं एक विशेषज्ञ नहीं हूं, लेकिन यह हो सकता है कि पहले आह्वान अनंत बार अनंत को प्रिंट करने की कोशिश कर रहा हो। (या तर्क बस बहुत लंबा हो सकता है।)
१२

5
@strugee तर्क सूची कभी आबाद नहीं होती है, क्योंकि yesकभी नहीं लौटती है।
क्रिस डाउन

@strugee आप का उपयोग "अनंत अनंत बार" प्राप्त कर सकते हैं xargs: yes yes | xargs -P 0 yes(या बिना -P 0एकल प्रक्रिया अनंत के लिए)
केली स्ट्रैंड

जवाबों:


25

इसे चलाने के लिए पहले से ही पर्याप्त होना चाहिए

 echo $(yes yes)

$(...)भीतरी आदेश जब तक वह पूरा और कैप्चर कर रहा है अपने सभी उत्पादन चलाता है। - अब जैसा कि yesएक लंबा समय चलता है और बहुत अधिक आउटपुट उत्पन्न करता है, बैश अंततः मेमोरी और क्रैश से बाहर निकल जाएगा।


6

आपके शेल को बंद करने वाली त्रुटि के लिए संदेश देखने के लिए, आपको उप-शेल चलाने की आवश्यकता है।

$ sh
$ kill -9 $$
Killed
$

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

1
16 मिलियन गीगाबाइट, एह? गॉर्डन मूर एक कोने में
दुबके हुए हैं
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.