6 पॉइंट द्वारा GN⁺ 2025-03-23 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • कई command-line utilities short form options (-f) और long form options (--force) को support करती हैं
  • short form interactive उपयोग के लिए होते हैं; scripts में long form का उपयोग करने की सिफारिश की जाती है
  • उदाहरण के लिए, terminal में आप $ git switch -c my-new-branch टाइप करते हैं.
  • release script में इसे इस तरह लिखा जाता है:
    • try shell.exec("git fetch origin --quiet", .{});
    • try shell.exec("git switch --create release-{today} origin/main", .{ .today = stdx.DateUTC.now() }, );
  • long form options पाठक के लिए कहीं अधिक वर्णनात्मक होते हैं

1 टिप्पणियां

 
GN⁺ 2025-03-23
Hacker News टिप्पणी
  • मुझे लंबे options पसंद हैं, लेकिन जब POSIX commands को portable तरीके से call करना हो, तो short options ही एकमात्र विकल्प होते हैं। POSIX लंबे options को निर्दिष्ट नहीं करता

    • उदाहरण के लिए, आप diff की specification देख सकते हैं
    • ज़्यादातर मामलों में, POSIX utilities पर निर्भर रहने के बजाय library bindings का उपयोग करना बेहतर विकल्प है
    • grep को call करने के बजाय libpcre जैसी किसी चीज़ का उपयोग करना अधिक efficient हो सकता है
    • git, hg, rg, ag आदि जैसे non-POSIX utilities में लंबे options का उपयोग करना उचित है
  • string interpolation और command execution को mix नहीं करना चाहिए

    • खासकर जब command shell के ज़रिए process हो रही हो, तब सावधानी रखनी चाहिए
    • किसी भी language में list-based या array-based execution API का उपयोग करके arguments को सीधे execv(2), execvp(2) आदि में pass करना चाहिए
  • मैं इस बात से सहमत हूँ कि लंबे options इस्तेमाल करने चाहिए, लेकिन portability का ध्यान रखना होगा

    • सभी BSD distributions GNU-style लंबे options को support नहीं करतीं
    • अगर portability चाहिए, तो short options का उपयोग करना चाहिए
  • सभी options के बाद और dynamic arguments से पहले -- का उपयोग करना न भूलें

  • command को call करने से पहले यह जाँचना चाहिए कि उसकी लंबाई ARG_MAX से अधिक तो नहीं है

    • उदाहरण के लिए, जब इस तरह का command हो:
      • grep --ignore-case --files-with-matches -- "hello" *.c
    • तो इसे इस तरह call करना चाहिए:
      • CMD="grep --ignore-case --files-with-matches -- \"hello\" *.c"
      • ARG_MAX=$(getconf ARG_MAX)
      • CMD_LEN=${#CMD}
      • if (( CMD_LEN > ARG_MAX )); then
      • echo "Error: Command length ($CMD_LEN) exceeds ARG_MAX ($ARG_MAX)." >&2
      • exit 1
      • fi
      • eval "$CMD" # चेतावनी, यह file names को evaluate करता है
  • मैं इस तरीके से सहमत हूँ। एक और फायदा यह है कि man page में option क्या करता है, इसे grep करना आसान हो जाता है

  • अगर आप script को दूसरे POSIX systems पर portable बनाना चाहते हैं, तो आपको short options का उपयोग करना पड़ सकता है

    • लंबे options standardized नहीं हैं
    • trade-off आपको खुद तय करना होगा
  • options को अलग-अलग lines में रखना चाहिए ताकि उन्हें track करना और git blame करना आसान हो

  • scripts लिखते समय यह बुनियादी नियमों में से एक है। जहाँ लंबे options संभव हों, उनका उपयोग करना चाहिए

    • ऐसा करना बहुत तर्कसंगत है
  • long-form options पाठक के लिए कहीं अधिक descriptive होते हैं

    • टाइपो कम होते हैं