Fish - एक परिचित इंटरैक्टिव शेल
(github.com/fish-shell)- 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_configweb configuration tool के लिए Python 3.5+ चाहिए - system clipboard integration के लिए
xsel,xclip,wl-copy/wl-paste,pbcopy/pbpasteमें से एक चाहिए yarnऔरnpmकी पूर्ण completion के लिएall-the-package-namesNPM module चाहिए
- manual page आधारित auto-completion generation और
- 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 टिप्पणियां
मैं अभी zsh इस्तेमाल कर रहा हूँ, लेकिन अगली बार मौका मिला तो fish भी एक बार आज़माकर देखूँगा।
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 के जिम्मे होना बेहतर है।
और ज्यादा चिढ़ाने वाली बात यह थी कि जब वे मदद मांगते थे, तो मेरे बताए commands fish में बिल्कुल नहीं चलते थे, जिससे समस्या हल करना बहुत धीमा हो जाता था।
बाकी zsh config का ज्यादातर हिस्सा prompt utility और कई सालों में जोड़ी गई चीजें हैं, और plugins न इस्तेमाल करता हूं न जरूरत है। जरूरत होती तो पहले आजमाया हुआ zplug setup और इस्तेमाल में वाकई आसान था।
[1]: https://github.com/mid-kid/config/blob/master/shell/.zshrc#L...
/bin/shcompatible scripts लिखना जरूरी न होता, तो मिलते-जुलते कारणों से Fish पर switch कर चुका होता।user experience के नजरिए से यह दूसरे shells से बहुत आगे है, और हैरानी होती है कि Mac जैसे operating systems में इसे default के रूप में नहीं अपनाया गया। Fish में मैं परिवार वालों को terminal tasks guide करूं तो कोई चिढ़ता या हार नहीं मानता, लेकिन दूसरे shells के बारे में ऐसा कहना मुश्किल है।
कुछ साल पहले अपने मनचाहे plugins चुनने और repo बनाने में करीब एक घंटा लगा था, और अब नई machine 5–10 मिनट में तैयार हो जाती है।
Fish को login shell के रूप में 10 साल से ज्यादा समय से इस्तेमाल कर रहा हूं, और दूसरों के उलट इसे scripting के लिए भी इस्तेमाल करता हूं। सरल कामों में bash की तुलना में कम pitfalls हैं, इसलिए script लिखना कहीं बेहतर है।
online explanations पढ़ते समय bash examples को fish में ले जाना मामूली काम है। जब लोग कहते हैं कि यह समस्या है, तो समझ नहीं आता, और असल में मुझे कभी परेशानी नहीं हुई।
set -eजैसा error पर fail mode नहीं है। समझता हूं कि हर case में, जैसे pipefail तक, इसे सही से चलाना मुश्किल है, लेकिन इस feature के बिना मैं बहुत सारी scripts नहीं लिखना चाहूंगा।fish लगभग 5 साल इस्तेमाल किया है और अब वापस नहीं जाना चाहता। कोई extra feature install किए बिना भी, package manager और plugins तक के साथ मेरी पुरानी zsh config जो काम करती थी, वह सब default state में कर देता है।
मैंने बस spacefish, और अब starship.rs जोड़ा है।
zभी आजमाने लायक है। और अभी config नहीं देख सकता, लेकिन एक plugin है जो लंबे समय तक चलने वाली background command खत्म होने पर notify करता है, और वह काफी उपयोगी है।काफ़ी समय बाद है, इसलिए इससे जुड़े 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 जोड़ा है
fish की tagline मुझे बहुत पसंद है और काफी मज़ेदार भी है। कुछ समय इस्तेमाल किया और वह काफी अच्छा था, लेकिन development strategy के तौर पर configurable options से स्पष्ट रूप से बचता है
कुछ चीज़ें बार-बार खटकती रहीं, लेकिन behavior बदलने का तरीका नहीं था, इसलिए मैं zsh पर चला गया और उसे fish जैसा behave कराने के साथ-साथ अपनी पसंद के तरीके से बनाया। मेरे लिए यह अच्छा फैसला था और recommend करने लायक है। oh-my-zsh या plugin managers भी मुझे खास पसंद नहीं
मैं 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 से आराम से कर पाना मुश्किल होगा
#!/bin/bashडालकर scripting bash में ही जारी रखते हुए, interactive shell के लिए fish इस्तेमाल कर सकते हैं ना?निजी तौर पर मैं shell में इतनी complex चीज़ें लगभग डालता ही नहीं, और उस point तक पहुंचते ही उसे script में निकाल देता हूं
bassइस्तेमाल करने पर switch करने की ज़रूरत मुझे ज्यादा महसूस नहीं हुईhttps://github.com/edc/bass
मैं fish इस्तेमाल नहीं करता, लेकिन इसमें एक शानदार feature है जिसे zsh में अभी तक clone नहीं किया गया है। यह man pages से auto-completion generate करता है, इसलिए लगभग हर program के लिए basic flag completion अपने-आप मिल जाती है