- 10 साल से अधिक समय तक dotfiles को मेंटेन करते हुए लिखे गए कई shell scripts में से सबसे ज़्यादा इस्तेमाल होने वाले स्क्रिप्ट्स का परिचय
- इन्हें clipboard·file management·internet·text processing·REPL launcher·date/time·AV·process·quick reference·system·grab bag जैसी श्रेणियों में बाँटा गया है, और हर स्क्रिप्ट को छोटे wrapper रूप में व्यावहारिक उदाहरणों के साथ दिखाया गया है
- ज़्यादातर स्क्रिप्ट्स macOS और Linux पर काम करते हैं, और मुख्य दर्शन यह है कि “पहले से मौजूद tools की झंझट भरी छोटी-मोटी जटिलताओं को समतल करना”
pbcopy/xclip, python3 -m http.server, yt-dlp, ffmpeg, mpv जैसे standard utilities का एकीकरण
- सबसे अधिक उपयोग होने वालों में
copy/pasta/pastas/cpwd, mkcd/tempe/trash/mksh, serveit/getsong/getpod/getsubs, scratch/straightquote/markdownquote, timer/boop/tunes आदि शामिल हैं
अपने dotfiles को मेंटेन करते हुए बनाए गए सबसे ज़्यादा इस्तेमाल होने वाले स्क्रिप्ट्स का परिचय
- 10 साल से अधिक समय तक personal dotfiles को मैनेज करते हुए बनाए गए अलग-अलग shell scripts में से, अक्सर उपयोग किए जाने वाले स्क्रिप्ट्स को क्षेत्रवार व्यवस्थित किया गया है
- हर स्क्रिप्ट के साथ उसका उद्देश्य, उपयोग की आवृत्ति, और प्रतिनिधि उदाहरण दिए गए हैं, जिससे तुरंत लागू करने की उपयोगिता बढ़ती है
- साझा लक्ष्य हैं दोहराए जाने वाले कामों को छोटा करना, platforms के बीच abstraction, और सुरक्षा·पठनीयता में सुधार
clipboard से जुड़े scripts
copy और pasta: system clipboard manager को wrap करने वाले wrappers, जो macOS के pbcopy या Linux के xclip पर आधारित हैं
copy: output को clipboard में कॉपी करता है
pasta: clipboard से text लेकर output देता है
- उदाहरण:
run_some_command | copy, pasta > file.txt, vim "$(pasta)", pasta | base64 --decode
pastas: clipboard की स्थिति बदलते ही नया content real time में output करने वाला tool
- कॉपी किए गए सभी links को file में सेव करने या कई links को एक साथ डाउनलोड करने में उपयोगी
- उदाहरण:
pastas > everything_i_copied.txt, pastas | wget -i -
cpwd: मौजूदा directory path को clipboard में कॉपी करता है
- कई terminal tabs के बीच directories बदलते समय सुविधाजनक
file management scripts
mkcd foo: directory बनाकर तुरंत उसमें जाना (mkdir foo && cd foo का शॉर्टकट)
tempe: अस्थायी directory में जाना (cd "$(mktemp -d)"), sandbox environment में temporary काम करते समय बाद में सफाई की ज़रूरत नहीं
trash: files को trash में भेजता है (macOS/Linux support), साधारण rm की तुलना में गलती से deletion रोकने के लिए
mksh: नया shell script file बनाता है, उसे executable सेट करता है, और तुरंत editor में खोलता है
internet से जुड़े scripts
serveit: local directory से static file server चलाता है (default port 8000, Python न हो तो fallback)
getsong yt-dlp से सबसे अच्छी audio quality में download करता है
getpod video को podcast के लिए audio के रूप में लेने वाला wrapper है
getsubs official subtitles को प्राथमिकता देता है और fallback के रूप में auto subtitles इस्तेमाल करके अंग्रेज़ी subtitles निकालता है। यह summary pipeline और backup उपयोग के लिए उपयुक्त है
wifi off/on/toggle: system WiFi control, network issues troubleshoot करते समय उपयोगी
url: URL string को parse करके protocol, hostname, path, query, hash आदि अलग-अलग निकालता है
text processing scripts
line 10: standard input से किसी खास line को output करता है (head, tail जैसा)
scratch: $EDITOR $(mktemp) की तरह Vim में अस्थायी text buffer जल्दी खोलने के लिए, one-off notes या छोटे transformation कामों के लिए उपयुक्त
straightquote: smart quotes को सामान्य straight quotes में बदलता है, code में quote समस्याओं को रोकता है और file size कम करता है
markdownquote: हर line के आगे > लगाकर Markdown blockquote बनाता है
length: input string की लंबाई लौटाता है (wc -c का विकल्प)
jsonformat: JSON data को सुन्दर format में output करता है
uppered/lowered: string को uppercase/lowercase में बदलता है
nato bar: input string को NATO alphabet code में बदलता है (Bravo Alfa Romeo आदि)
u+ 2025: Unicode character का नाम और symbol दिखाता है
snippets foo: personal snippet dictionary से किसी खास short phrase को लाता है
snippet arrow तीर → देता है, snippet recruiter “not interested” जैसे template messages देता है
REPL launcher से जुड़े scripts
- Ruby के
irb से प्रेरित होकर अलग-अलग भाषाओं के REPL जल्दी चलाना:
iclj: Clojure
ijs: Deno (न हो तो Node)
iphp: PHP
ipy: Python
isql: SQLite (Bash में memory mode)
date और time scripts
hoy: मौजूदा तारीख ISO format में output करता है (उदाहरण: 2020-04-20), file name आदि के prefix के रूप में उपयोगी
timer 10m: time timer (जैसे 10 मिनट), पूरा होने पर sound और OS notification भेजता है
rn: date और cal का उपयोग करके वर्तमान समय और मासिक calendar को पढ़ने में आसान रूप में दिखाता है
audio, video, image processing
ocr: macOS पर image files से text extraction (आगे विस्तार की योजना)
boop: पिछला command सफल/असफल होने के आधार पर sound notification देता है (जैसे tests चलाने के बाद सहज उपयोग)
sfx: खास sound effect file (.ogg) चलाता है, boop, timer के साथ जुड़ता है
tunes: mpv से audio files चलाता है (shuffle support सहित)
pix: mpv से photos देखता है
radio: पसंदीदा internet radio stations का quick launcher
speak: stdin से पढ़े गए text से Markdown हटाकर speech synthesis (TTS) करता है
shrinkvid: ffmpeg से video file compress करता है
removeexif: JPEG से EXIF data हटाता है, आगे कई formats support करने की योजना
tuivid: terminal के भीतर video देखना, व्यावहारिक उपयोग कम लेकिन दिलचस्प feature
process management
each: xargs, find ... -exec का विकल्प, complex commands चलाना आसान बनाता है
running foo: दिए गए keyword से चल रहे processes (PID, command आदि) खोजकर पढ़ने योग्य रूप में output करता है
murder: kill का wrapper, धीरे-धीरे नरम signals से शुरू करके ज़रूरत पड़ने पर forceful termination तक जाता है। program बंद करने के अनुरोध में गलती रोकने के लिए
waitfor $PID: दिए गए PID के समाप्त होने तक प्रतीक्षा करता है, सिस्टम को जागृत अवस्था में रखता है
bb my_command: command को वास्तव में background mode में चलाता है, daemon आदि के लिए उपयुक्त
prettypath: $PATH को line breaks के साथ एक नज़र में पढ़ने योग्य रूप में output करता है (debugging में उपयोगी)
tryna my_command/trynafail my_command: command सफल होने तक बार-बार चलाना (run until success), या असफल होने तक चलाना (run until fail); network सहित कई automation कामों में उपयोगी
quick reference tools
emoji: keyword से emoji खोजता और output करता है
httpstatus: सभी HTTP status codes की सूची output करता है, किसी खास code का विवरण भी देख सकता है
alphabet: अंग्रेज़ी alphabet के lowercase·uppercase पूरे output करता है (उम्मीद से ज़्यादा उपयोगी)
system management
theme 0/theme 1: पूरे system का theme (dark/light) बदलता है, Vim, Tmux आदि से भी जुड़ता है
sleepybear: system को sleep mode में डालता है (macOS, Linux)
ds-destroy: .DS_Store files को recursive ढंग से हटाता है, macOS user folders साफ़ करने में उपयोगी
अन्य
catbin foo: PATH में मौजूद file का source code तुरंत दिखाता है
notify: OS स्तर की notification भेजता है, लंबे काम पूरे होने पर तुरंत सूचित करने के लिए
uuid: version 4 UUID बनाता है
निष्कर्ष
- इस लेख में बताए गए scripts वे tools हैं जिन्हें लेखक वास्तव में अक्सर उपयोग करता है
- खुद बनाए गए shortcut command scripts काम की दक्षता बढ़ाने, गलतियों को रोकने, और productivity सुधारने में बहुत प्रभावी हैं
- आपको भी अपने automation scripts बनाकर इस्तेमाल करने की सलाह दी जाती है
2 टिप्पणियां
Hacker News राय
trash a.txt b.pngकमांडa.txtऔरb.pngफ़ाइलों को ट्रैश में भेजती है, और Mac व Linux पर सपोर्टेड है। मैं पहले जो तरीका इस्तेमाल करता था, उसमें हर फ़ाइल को क्रम से प्रोसेस किया जाता था, इसलिए हर फ़ाइल पर delete की आवाज़ आती थी और Finder के ⌘Z से सिर्फ़ आख़िरी फ़ाइल ही restore की जा सकती थी। इसे बेहतर बनाया जा सकता है, लेकिन सच कहें तो macOS में बिल्ट-इन आधिकारिकtrashकमांड इस्तेमाल करना ज़्यादा सुविधाजनक है। मैं Finder इस्तेमाल नहीं करता, इसलिए आवाज़ या ⌘Z restore नहीं मिलता, लेकिन यह तेज़ है और “Put Back” फीचर भी काम करता है। और JSON pretty-print के लिए node की जगह jq इस्तेमाल करें तो कोड बहुत छोटा हो जाता है, और आजकल macOS में jq पहले से इंस्टॉल आता है। UUID प्रिंट करने के लिए भी यही बात है—अगर v4 UUID चाहिए तो uuidgen इस्तेमाल करना बेहतर है (man page देखें)सेल्फ-मेड scripts की तुलना में बिल्ट-इन फीचर्स इस्तेमाल करना अक्सर बेहतर होता है। उदाहरण के लिए vim में markdownquote इस्तेमाल करने के बजाय ctrl-v से पहली column चुनकर "i> " और फिर escape दबा दें। यह छोटा और ज़्यादा efficient है। मुझे यह जानने की जिज्ञासा है कि u+ 2025, ñ क्यों लौटाता है, जबकि असली Unicode value U+00F1 है। और catbin foo,
cat "$(which foo)"के बराबर है। अगर आप zsh इस्तेमाल करते हैं, तोcat =fooज़्यादा छोटा और ताकतवर है। zsh में = के बाद autocomplete काम करता है, इसलिए लंबे commands के साथ भी सुरक्षित है। मैं इसे file =firefox, vim =myscript.sh जैसी चीज़ों में अक्सर इस्तेमाल करता हूँमेरा अंदाज़ा है कि लेखक को uuidgen के बारे में पता नहीं था। ऐसी जानकारी या config साझा करने पर हमेशा मेरे blind spots सामने आते हैं, इसलिए sharing ज़रूरी है
Python भी डिफ़ॉल्ट रूप से JSON pretty-print कर सकता है
trashजानकारी के लिए धन्यवाद। मैं अब तक कई फ़ाइलों को ट्रैश में भेजने के लिएtell app \"Finder\" to move {%s} to trashजैसी AppleScript इस्तेमाल करता थाrm और trash के विकल्प के रूप में rip भी recommend करता हूँ rip project link
डेवलपर की life cycle काफ़ी दिलचस्प होती है। शुरुआत में सिर्फ़ vanilla shell environment इस्तेमाल होता है, फिर 1~2 साल के अनुभव पर scripts और bash alias की सैकड़ों lines बना ली जाती हैं। अब 15 साल बाद मैं उल्टा जितना हो सके basic shell ही इस्तेमाल करता हूँ, alias भी नहीं रखता, और complex चीज़ें Python या Go से करता हूँ
यह रुझान किसी तरह की enlightenment से ज़्यादा शायद आलस से आता है (मैं भी बिल्कुल ऐसा ही हूँ, इसलिए कह रहा हूँ)। Custom environment में गहराई तक जाने वाले साथियों की वजह से नए tools सीखने को मिलते रहते हैं, और हाल में मैंने Linux में atuin, fzf जैसे tools भी जोड़े हैं
मैं dotfile में alias और function लिखकर अक्सर इस्तेमाल होने वाले commands को record/remember करने के लिए रखता हूँ। अपना toolset लगातार update करता रहता हूँ, और उसे नए workstation पर migrate करना भी आसान होता है
पहले जब मेरे पास सिर्फ़ एक nix कंप्यूटर था, तब मैं customization बहुत करना चाहता था। अब कई मशीनें साथ में इस्तेमाल करता हूँ, इसलिए सिर्फ़ ज़रूरी packages इंस्टॉल करके environment को एक जैसा रखता हूँ
Python में लिखी चीज़ को भी मैं script ही कहता हूँ। मेरा मानना है कि script शब्द सिर्फ़ shell script तक सीमित नहीं है
आजकल युवा engineers के साथ काम करते हुए जब उन्हें कई dotfiles इस्तेमाल करते देखता हूँ, तो लगता है “मैं भी पहले ऐसा ही करता था, कितना झंझट था।” अब मैं tools को चुनिंदा तरीके से इस्तेमाल करता हूँ और ज़रूरत के हिसाब से flexible customization करता हूँ। दूसरों के style का भी सम्मान करता हूँ
HN पर ऐसे practical tips वाले posts मिलना मुझे बहुत पसंद है। दूसरे developers वास्तव में कैसे काम करते हैं, और मैं क्या सीखकर अपनाऊँ, यह जानने में दिलचस्पी रहती है। शुरुआत में लगता है “शायद यह मेरे काम का नहीं होगा”, लेकिन अगर कोई काम आसान हो जाए तो वही काम एक नया workflow बना देता है। इसलिए मैं पहले try करता हूँ और जो suit करे उसे रखता हूँ। मूल पोस्ट का style भी पसंद आया—वास्तविक usage frequency साथ में लिखना सचमुच practical है। मैं अक्सर छोटे काम browser devtools खोलकर JavaScript से ही कर लेता हूँ। (जैसे string को lowercase करना)
अगर लेखक के तरीके और मेरे तरीके में लगने वाला समय, script बनाने/याद रखने/रेफ़र करने/migration की लागत तक जोड़कर असली cost-benefit analysis किया जाए, तो वह दिलचस्प होगा
यह Bash shortcuts cheat sheet image बहुत मददगार है
line script की जगह, sed से किसी खास line को print करना ज़्यादा सरल है
इससे दूसरी line प्रिंट की जा सकती है। कई lines प्रिंट करने के लिए भी
जैसा इस्तेमाल किया जा सकता है, इसलिए यह line script से बेहतर है
मेरे पास कुछ सरल scripts हैं जिन्हें मैं अक्सर इस्तेमाल करता हूँ। उदाहरण के लिए:
पर्सनल scripts के आगे , (comma) लगाकर रखा जा सकता है ताकि जल्दी switch किया जा सके। मुझे लगता है कि अपने scripts का history से समय-समय पर statistics निकालना और जो अब इस्तेमाल नहीं होते उन्हें साफ़ करना काफ़ी काम की चीज़ है
अभी इसे generalize नहीं किया है, लेकिन
unmvscript से मैं काफ़ी सुविधाजनक तरीके से काम कर रहा हूँयहाँ कई अच्छे tips हैं, लेकिन मैं ज़्यादातर standard utilities (sed, awk, grep, xargs आदि) सीखकर इस्तेमाल करता हूँ। वजह यह है कि मुझे कई systems पर जाकर काम करना पड़ता है, और मेरे personal scripts व alias ज़्यादातर वहाँ इंस्टॉल नहीं होते। Standard utilities से लगभग सब कुछ किया जा सकता है
मैं अपना पसंदीदा extraction script साझा कर रहा हूँ
इसका उल्टा counterpart भी बनाना चाहता हूँ, जो compress करे
मैं dtrx इस्तेमाल करता हूँ, यह archive को अपने-आप folder के अंदर extract कर देता है, जो अच्छा लगता है
मुझे aunpack ज़्यादा सुविधाजनक लगता है
सच में बहुत साफ़-सुथरा है
अगर इसमें inotify और systemd user service भी जोड़ दिए जाएँ तो यह एक स्तर और आगे बढ़ जाएगा। इसका packaged version पहले से मौजूद भी है। खुद बनाना थोड़ा square wheel (reinvention) जैसा लगता है
mp4 encode या trim करने के लिए मैं हमेशा दो functions इस्तेमाल करता हूँ। इन flags की वजह से WhatsApp, mobile Discord जैसी कई environments में compatibility बहुत अच्छी रहती है
fftime मूल फ़ाइल को दोबारा encode किए बिना तेज़ी से काट देता है, लेकिन वीडियो के हिसाब से थोड़ी समस्या (जैसे playback न होना) आ सकती है। दोबारा encode करना हो तो
-c copyहटा देंजब भी alias या function बनाकर test करता हूँ,
~/.zshrcको तुरंत reload करना सुविधाजनक लगता है, इसलिए मैं यह alias इस्तेमाल करता हूँऔर Mac पर docx फ़ाइलों में grep करने के लिए यह function इस्तेमाल करता हूँ
इसके अलावा, अपने Mac के clipboard को anonymize करके ChatGPT या कंपनी के Slack जैसे public channels में paste करने से पहले debugging के लिए मैं नीचे वाला function चलाता हूँ। Function चलाने पर नया transformed clipboard stdout में भी दिखता है, इसलिए यह जाँचना आसान है कि कुछ छूट तो नहीं गया
मुझे GeekNews पर आया Ask GN: क्या आपके पास कोई शेल स्निपेट हैं जिन्हें आप अक्सर इस्तेमाल करते हैं? शीर्षक वाला लेख भी याद आ गया।