2 पॉइंट द्वारा GN⁺ 2023-08-28 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • fish macOS, Linux और संबंधित परिवारों पर चलने वाला एक user-friendly command-line shell है, जो बिना अलग सेटअप के syntax highlighting, टाइप करते समय autosuggestions, और tab completion प्रदान करता है
  • यह bash या zsh जैसे अन्य shells की तरह अधिकांशतः काम करता है, लेकिन “unlike other shells” के तहत मिलने वाले मुख्य अंतर आधिकारिक tutorial में संकलित हैं
  • इंस्टॉलेशन के रास्ते प्लेटफ़ॉर्म के अनुसार अलग हैं; macOS पर Homebrew, MacPorts, fishshell.com installer, और standalone app समर्थित हैं
    • macOS का न्यूनतम समर्थित वर्ज़न 10.12 है
    • Linux के लिए Debian, Fedora, openSUSE, Red Hat Enterprise Linux/CentOS पैकेज openSUSE Build Service से उपलब्ध हैं
    • Ubuntu पैकेज fish PPA के जरिए इंस्टॉल किए जा सकते हैं
    • Windows 10/11 पर WSL की Linux distribution प्रक्रिया या source build से इंस्टॉल किया जा सकता है, और सभी Windows वर्ज़न पर Cygwin या MSYS2 इंस्टॉलेशन समर्थित है
  • इंस्टॉलेशन के बाद मौजूदा shell में fish चलाकर उपयोग शुरू किया जाता है, और fish के अंदर help कमांड तथा आधिकारिक दस्तावेज़ में user documentation देखी जा सकती है
  • इसे चलाने के लिए बुनियादी POSIX utilities और mktemp जैसी सामान्य *nix system utilities चाहिए, जबकि कुछ वैकल्पिक फीचर्स के लिए अलग tools की आवश्यकता होती है
    • manual page आधारित auto-completion generation और fish_config web configuration tool के लिए Python 3.5+ चाहिए
    • system clipboard integration के लिए xsel, xclip, wl-copy/wl-paste, pbcopy/pbpaste में से एक चाहिए
    • yarn और npm की पूर्ण completion के लिए all-the-package-names NPM module चाहिए
  • source build के लिए Rust 1.85 या उससे ऊपर, CMake 3.15 या उससे ऊपर, और C compiler चाहिए; PCRE2 और gettext को optional dependencies के रूप में रखा गया है
  • यह CMake build और Cargo build दोनों को सपोर्ट करता है; Cargo build standalone binary को ~/.cargo/bin/ में रखता है, और पूरा CMake install standard locations में man pages, HTML docs की local copy, तथा अतिरिक्त functions, completions, और configuration directories के विकल्प प्रदान करता है

2 टिप्पणियां

 
joyfui 2023-08-28

मैं अभी zsh इस्तेमाल कर रहा हूँ, लेकिन अगली बार मौका मिला तो fish भी एक बार आज़माकर देखूँगा।

 
GN⁺ 2023-08-28
Hacker News की राय
  • fish का सबसे बड़ा फायदा यह है कि सेटअप लगभग नहीं के बराबर चाहिए। 41 साल की उम्र में परिवार भी है, इसलिए टूल सेटअप में समय बर्बाद करने का बिल्कुल धैर्य नहीं है, और zsh हर बार उसे काम लायक बनाने की कोशिश में बाधा जैसा लगा।
    कई zsh स्क्रिप्ट भी बहुत मजबूत नहीं कही जा सकतीं, और अगर आप shell अक्सर इस्तेमाल करते हैं, तो यूज़र scripts के उस ढेर में—जिनका स्रोत आम तौर पर copy-paste होता है—आखिरकार ऐसे edge cases मिल ही जाते हैं जिन्हें वे संभाल नहीं पाते।
    मेरी fish dotfiles https://github.com/mattgreen/dotfiles/tree/master/fish पर हैं, और उनमें बस submodule-आधारित plugin system, asynchronous git prompt, aliases और कुछ environment variables हैं।
    fish पहले से ही लगभग सब कुछ देता है, इसलिए maintenance की जरूरत नहीं पड़ती, और अब मेरी बस यही इच्छा है कि asynchronous prompt को first-class feature बनाया जाए, क्योंकि state tracking की वजह से यह user code की बजाय shell के जिम्मे होना बेहतर है।

    • मैं bash इस्तेमाल करता हूं और tool setup के लिए भी धैर्य नहीं है, लेकिन वे fish dotfiles मेरी bash config से ज्यादा जटिल लगती हैं। पहले मेरी team के कई engineers fish बहुत इस्तेमाल करते थे, लेकिन मैंने fish को ऐसा कुछ करते नहीं देखा जो bash से न हो सके; बस थोड़ा ज्यादा चमकदार दिखता था।
      और ज्यादा चिढ़ाने वाली बात यह थी कि जब वे मदद मांगते थे, तो मेरे बताए commands fish में बिल्कुल नहीं चलते थे, जिससे समस्या हल करना बहुत धीमा हो जाता था
    • लगभग 10 साल पहले zsh के initial setup wizard से सिर्फ एक बार गुजरा था[1], और उसमें करीब 5–10 मिनट लगे। हर command का मतलब पूरी तरह नहीं समझता, लेकिन उसके बाद कभी बदलाव नहीं किया और यह ठीक चलता है।
      बाकी zsh config का ज्यादातर हिस्सा prompt utility और कई सालों में जोड़ी गई चीजें हैं, और plugins न इस्तेमाल करता हूं न जरूरत है। जरूरत होती तो पहले आजमाया हुआ zplug setup और इस्तेमाल में वाकई आसान था।
      [1]: https://github.com/mid-kid/config/blob/master/shell/.zshrc#L...
    • लगभग पूरी तरह सहमत हूं। अगर काम की वजह से /bin/sh compatible scripts लिखना जरूरी न होता, तो मिलते-जुलते कारणों से Fish पर switch कर चुका होता।
      user experience के नजरिए से यह दूसरे shells से बहुत आगे है, और हैरानी होती है कि Mac जैसे operating systems में इसे default के रूप में नहीं अपनाया गया। Fish में मैं परिवार वालों को terminal tasks guide करूं तो कोई चिढ़ता या हार नहीं मानता, लेकिन दूसरे shells के बारे में ऐसा कहना मुश्किल है।
    • zsh config के लगातार रास्ते में आने वाली बात को oh-my-zsh ने बचा लिया। मेरे पास एक बहुत छोटी dotfile है जो ज्यादातर config omz को सौंप देती है, और उसे हर नई machine पर clone होने वाले bare repo में रखता हूं।
      कुछ साल पहले अपने मनचाहे plugins चुनने और repo बनाने में करीब एक घंटा लगा था, और अब नई machine 5–10 मिनट में तैयार हो जाती है।
    • अगर zsh को पहले ही अपनी पसंद के हिसाब से सेट कर रखा है, तो fish पर बदलने से कौन-से सुधार या बदलाव मिलेंगे, यह जानने की उत्सुकता है।
  • Fish को login shell के रूप में 10 साल से ज्यादा समय से इस्तेमाल कर रहा हूं, और दूसरों के उलट इसे scripting के लिए भी इस्तेमाल करता हूं। सरल कामों में bash की तुलना में कम pitfalls हैं, इसलिए script लिखना कहीं बेहतर है।
    online explanations पढ़ते समय bash examples को fish में ले जाना मामूली काम है। जब लोग कहते हैं कि यह समस्या है, तो समझ नहीं आता, और असल में मुझे कभी परेशानी नहीं हुई।

    • scripting में इसे ज्यादा बार इस्तेमाल करने से रोकने वाली एक चीज यह है कि bash के set -e जैसा error पर fail mode नहीं है। समझता हूं कि हर case में, जैसे pipefail तक, इसे सही से चलाना मुश्किल है, लेकिन इस feature के बिना मैं बहुत सारी scripts नहीं लिखना चाहूंगा।
  • fish लगभग 5 साल इस्तेमाल किया है और अब वापस नहीं जाना चाहता। कोई extra feature install किए बिना भी, package manager और plugins तक के साथ मेरी पुरानी zsh config जो काम करती थी, वह सब default state में कर देता है।
    मैंने बस spacefish, और अब starship.rs जोड़ा है।

    • मेरा भी यही रास्ता था, लेकिन हाल ही में Tide prompt पर चला गया हूं। यह pure fish में बना है और सच में हैरान कर देने जितना तेज है।
    • z भी आजमाने लायक है। और अभी config नहीं देख सकता, लेकिन एक plugin है जो लंबे समय तक चलने वाली background command खत्म होने पर notify करता है, और वह काफी उपयोगी है।
    • जानना चाहता हूं कि आप starship किस काम के लिए इस्तेमाल करते हैं। दिलचस्प लगता है, लेकिन इसकी potential का सही इस्तेमाल करने के लिए कैसी कल्पना चाहिए, यह ठीक से समझ नहीं आता।
    • reverse search अब support करता है क्या? autocomplete में मेरी रुचि नहीं है।
    • क्या existing scripts को fish में convert करना पड़ा? या कोई automated तरीका है?
  • काफ़ी समय बाद है, इसलिए इससे जुड़े threads इकट्ठे कर रहा हूँ। और भी हैं क्या?
    What's Happening with Fish Releases? - https://news.ycombinator.com/item?id=36875727 - जुलाई 2023
    My shell setup with Fish and Tmux (2021) - https://news.ycombinator.com/item?id=35672358 - अप्रैल 2023
    Ask HN: Are alternative (oil, nu, etc.) shells usable as daily drivers? - https://news.ycombinator.com/item?id=34722208 - फ़रवरी 2023
    Rewrite it in Rust - https://news.ycombinator.com/item?id=34588340 - जनवरी 2023
    Fish 3.6.0 - https://news.ycombinator.com/item?id=34298157 - जनवरी 2023
    Fish Shell 3.5.0 - https://news.ycombinator.com/item?id=31768405 - जून 2022
    Fish 3.4.0 - https://news.ycombinator.com/item?id=30734072 - मार्च 2022
    Fish 3.4.0 Released - https://news.ycombinator.com/item?id=30660587 - मार्च 2022
    Ask HN: Oil or Fish Shell? - https://news.ycombinator.com/item?id=30154652 - जनवरी 2022
    The fish shell is amazing - https://news.ycombinator.com/item?id=29341390 - नवंबर 2021
    Nsh: A fish/bash-like Posix shell in Rust - https://news.ycombinator.com/item?id=28967257 - अक्टूबर 2021
    Fish Shell 3.3 - https://news.ycombinator.com/item?id=27663637 - जून 2021
    Fish shell - https://news.ycombinator.com/item?id=27180420 - मई 2021
    Fish Shell 3.2 - https://news.ycombinator.com/item?id=26302678 - मार्च 2021
    Fish is not operational on a VT220 terminal (2015) - https://news.ycombinator.com/item?id=25526237 - दिसंबर 2020
    New Features in the Fish Shell - https://news.ycombinator.com/item?id=24631138 - सितंबर 2020
    Dolphins learn from their peers to use empty shells to catch fish - https://news.ycombinator.com/item?id=23660910 - जून 2020
    Fish Shell 3.1.0 - https://news.ycombinator.com/item?id=22314671 - फ़रवरी 2020
    Fish: A command line shell for the 90s - https://news.ycombinator.com/item?id=21361696 - अक्टूबर 2019
    Show HN: Fisher 3.0 – the package manager for the fish-shell - https://news.ycombinator.com/item?id=18920972 - जनवरी 2019
    Fish shell 3.0 - https://news.ycombinator.com/item?id=18776765 - दिसंबर 2018
    Fish: A user-friendly command line shell for macOS, Linux, etc - https://news.ycombinator.com/item?id=15910897 - दिसंबर 2017
    Fish (Shell) for a Week - https://news.ycombinator.com/item?id=14422672 - मई 2017

Why I'm Hooked on Fish Shell (and How to Set It Up Right) - https://news.ycombinator.com/item?id=14417046 - मई 2017
The fish shell is awesome - https://news.ycombinator.com/item?id=14179081 - अप्रैल 2017
Fish Shell Design Principles - https://news.ycombinator.com/item?id=11102941 - फरवरी 2016
Fish shell 2.2 - https://news.ycombinator.com/item?id=9873090 - जुलाई 2015
Fish shell - https://news.ycombinator.com/item?id=9566441 - मई 2015
FISH Shell: A dynamic shell - https://news.ycombinator.com/item?id=8783150 - दिसंबर 2014
Fish shell 2.1 - https://news.ycombinator.com/item?id=6626635 - अक्टूबर 2013
fish shell - https://news.ycombinator.com/item?id=6224524 - अगस्त 2013
Fish shell 2.0 - https://news.ycombinator.com/item?id=5723235 - मई 2013
Fish 2.0 shell beta - https://news.ycombinator.com/item?id=5567639 - अप्रैल 2013
Fish: Finally, a command line shell for the 90s - https://news.ycombinator.com/item?id=4073162 - जून 2012
Fish sucks (but your shell sucks more) - https://news.ycombinator.com/item?id=2031110 - दिसंबर 2010
Fish - The friendly interactive shell - https://news.ycombinator.com/item?id=820677 - सितंबर 2009
Fish Shell: A User-Friendly Shell or Like a Heavily Customized zsh - https://news.ycombinator.com/item?id=811113 - सितंबर 2009

  • https://news.ycombinator.com/item?id=23660910 शायद यह पता लगाने के लिए एक ट्रैप लिंक हो सकता है कि कौन देख रहा है :)

  • मैंने zsh कभी इस्तेमाल करके देखा था, लेकिन default state में वह असल में bash जैसा ही लगा, और फायदे देखने के लिए समय लगाकर customize करना पड़ेगा—ऐसा impression था। मैं shell configuration पर समय खर्च नहीं करना चाहता; बस चाहता हूं कि वह तुरंत काम करे
    Fish बिना किसी setup के भी bash से साफ़ तौर पर बेहतर है, और जादुई auto-completion तो life-changing है

  • कॉलेज में Ubuntu पर fish इस्तेमाल किया था, और पहली नौकरी में मिला MacBook भी fish पर set किया। DevOps संभालने वाला सिर्फ एक व्यक्ति था, लेकिन app setup docs और scripts केवल zsh या bash में थे, और सच कहूं तो मुझे लगा था कि zsh पर switch कर लेना भी ठीक रहेगा
    लेकिन उसने मुझे रोका, फिर आधा दिन लगाकर fish सीखा और docs में fish scripts तक सब जोड़ दिए। सच में बहुत आभारी हूं उसका

  • fish की अच्छी बात यह है कि plugins install किए बिना भी शुरुआत से ही काफ़ी सारे convenience features देता है। मैंने बस starship.rs और fzf integration जोड़ा है

    • bash में भी आम तौर पर ये दोनों नहीं करते क्या?
    • starship.rs की ज़रूरत क्यों है?
  • fish की tagline मुझे बहुत पसंद है और काफी मज़ेदार भी है। कुछ समय इस्तेमाल किया और वह काफी अच्छा था, लेकिन development strategy के तौर पर configurable options से स्पष्ट रूप से बचता है
    कुछ चीज़ें बार-बार खटकती रहीं, लेकिन behavior बदलने का तरीका नहीं था, इसलिए मैं zsh पर चला गया और उसे fish जैसा behave कराने के साथ-साथ अपनी पसंद के तरीके से बनाया। मेरे लिए यह अच्छा फैसला था और recommend करने लायक है। oh-my-zsh या plugin managers भी मुझे खास पसंद नहीं

    • क्या आप थोड़ा और detail में बता सकते हैं कि क्या खटकता था? आलोचना करने के लिए नहीं, बस curiosity है
      मैं fish, zsh और अब elvish भी इस्तेमाल करता हूं, और मेरे लिए important चीज़ें हैं auto-suggestions और up arrow से history लाना। zsh में auto-suggestion module है, और elvish में up arrow history है, लेकिन वह सिर्फ शुरुआत के हिस्से को match करता है
      इसलिए fish अभी भी आगे है, और elvish second है क्योंकि command टाइप करके up arrow एक बार दबाना लगभग auto-suggestion जैसा लगता है। zsh में यह करने का तरीका मुझे नहीं मिला, और block handling भी traditional sh-family style की तुलना में fish और elvish वाला तरीका ज्यादा अच्छा लगता है
  • fish की सबसे बड़ी गलती यह है कि यह bash-compatible नहीं है। मैं bash का बहुत आदी हूं, और company systems में कुछ ऐसे हैं जहां सिर्फ bash access है और fish install नहीं कर सकते, इसलिए मैं बदलना नहीं चाहता
    अलग-अलग scripting languages के बीच बार-बार आना-जाना तकलीफ़देह है, और muscle memory से आराम से कर पाना मुश्किल होगा

    • script के सबसे ऊपर #!/bin/bash डालकर scripting bash में ही जारी रखते हुए, interactive shell के लिए fish इस्तेमाल कर सकते हैं ना?
    • interactive काम fish में करता हूं और scripting bash में। अगर कोई script है जिसे bash में नहीं लिखना चाहता, तो Python या Ruby जैसी असली programming language इस्तेमाल करता हूं
    • जब तक conditionals और loops नहीं लिखते, आपको शायद ही महसूस होगा कि यह bash नहीं है
      निजी तौर पर मैं shell में इतनी complex चीज़ें लगभग डालता ही नहीं, और उस point तक पहुंचते ही उसे script में निकाल देता हूं
    • bass इस्तेमाल करने पर switch करने की ज़रूरत मुझे ज्यादा महसूस नहीं हुई
      https://github.com/edc/bass
    • यह गलती नहीं, fish का core है। POSIX compatibility छोड़े बिना कोई sane shell scripting language नहीं बनाई जा सकती
  • मैं fish इस्तेमाल नहीं करता, लेकिन इसमें एक शानदार feature है जिसे zsh में अभी तक clone नहीं किया गया है। यह man pages से auto-completion generate करता है, इसलिए लगभग हर program के लिए basic flag completion अपने-आप मिल जाती है