मैंने एक bash enumerator लिखा क्योंकि मैं xargs से तंग आ गया था
एक छोटा Bash utility जो फ़ाइलों और सूचियों पर `{}` placeholder के साथ iteration को एकीकृत करता है, command-line उपयोगकर्ताओं में संदेह से मिलता है; उनका कहना है कि `find -print0`, `xargs -0`, GNU Parallel और साधारण `while read` loops, सही ढंग से उपयोग किए जाने पर, पहले से ही ये काम संभाल लेते हैं। टिप्पणीकार एक uniform syntax की चाहत की तुलना मौजूदा POSIX tools सीखने के मूल्य, portability चिंताओं, और अपने quirks वाले एक और wrapper जोड़ने के जोखिम से करते हैं। यह चर्चा आगे पारंपरिक shells की आलोचना तक फैलती है—Bash की कई footguns, zsh, nushell और PowerShell जैसे alternative tools, और सर्वव्यापी लेकिन पुरानी utilities के साथ बने रहने बनाम अधिक आधुनिक, structured approaches अपनाने के तनाव को उजागर करती है।
bashumerate की महसूस की गई ज़रूरत
- OP का लक्ष्य: फ़ाइलों, लाइनों, रेंज और सूचियों पर इटररेट करने के लिए एक ही, सुसंगत
{}-आधारित तरीका, ताकिfor,find -execऔरxargsफ्लैग्स से बचा जा सके। - कुछ लोगों को यह सिद्धांत में आकर्षक लगता है (एक मानसिक मॉडल, सरल oneliners)।
- दूसरे लोग कहते हैं कि यह “सरल” नहीं, बस “आसान” है: यह मौजूदा चीज़ें सीखने के बजाय एक और टूल और सिंटैक्स जोड़ देता है।
“बस शेल टूल्स का उपयोग करो” वाला पक्ष
- कई लोगों का कहना है कि
xargs+find(-print0/-0के साथ) पहले से ही लगभग सभी समस्याएँ हल कर देते हैं, जिनमें फ़ाइलनामों में spaces और argument list limits शामिल हैं। find -exec ... +औरfind -deleteको कई उदाहरणों के लिए बेहतर, सरल पैटर्न बताया गया।- कई लोग line-based iteration के लिए
while readloops (अक्सर$REPLYका उपयोग करते हुए) सुझाते हैं, pipes के साथ subshells को लेकर चेतावनियों के साथ। - कुछ लोग छोटे custom wrapper functions (mini-enumerators) दिखाते हैं, जिन्हें उन्होंने नया dependency जोड़ने के बजाय बनाया है।
सहीपन, edge cases, और syntax संबंधी चिंताएँ
- इस बात पर ज़ोर दिया गया कि “spaces वाले filenames” की समस्या NUL-termination (
-print0,xargs -0) से हल हो जाती है, और अब यह POSIX 2024 में मानकीकृत भी है। - filenames में newlines और glob expansion limits के बारे में चेतावनियाँ; कुछ लोग बताते हैं कि
bashumerateका glob-based implementation argument/memory issues से टकरा सकता है। enumeratesyntax की आलोचना:--का असामान्य उपयोग, quoting की ज़रूरतें, और template-style{}replacement के कारण quoting/escaping की वही पुरानी footguns वापस आना।- कुछ लोगों का तर्क है कि यह tool केवल
find/loops जो कर सकते हैं उसका एक subset ही कवर करता है, इसलिए यह replacement नहीं बल्कि ऊपर से अतिरिक्त syntax बन जाता है।
Performance और Parallelism
xargsकी arguments को batch करने और वैकल्पिक रूप से parallelize (-P) करने की क्षमता के लिए प्रशंसा की गई, जबकिfind -execअक्सर एक-एक process चलाता है।- कुछ लोग ज़्यादातर रोज़मर्रा के कामों में parallel speed से अधिक clarity और simplicity को प्राथमिकता देते हैं।
विकल्प और व्यापक shell बहस
- अन्य टूल्स का ज़िक्र: GNU Parallel (power के लिए प्रशंसा, लेकिन UX, citation nag, और first-run behavior के लिए आलोचना),
lr/xe,rush,fd, व्यक्तिगत Python/Go wrappers, CSV-based pipelines। - थ्रेड एक व्यापक बहस में बदल जाता है: पारंपरिक POSIX shell बनाम अधिक आधुनिक shells (zsh, nushell, PowerShell, rc, xonsh)।
- एक recurring theme: ubiquitous, standard tools (POSIX
sh/bash+ coreutils) का उपयोग portability के लिए मूल्यवान है, चाहे उनमें quirks हों, क्योंकि वे random systems पर भी काम आते हैं।