2 điểm bởi GN⁺ 2023-08-28 | 2 bình luận | Chia sẻ qua WhatsApp
  • fish là một shell dòng lệnh thân thiện với người dùng, hoạt động trên macOS, Linux và các hệ liên quan, đồng thời cung cấp tô sáng cú pháp, gợi ý tự động khi nhập và hoàn thành bằng phím Tab mà không cần cấu hình riêng
  • Về cơ bản, nó hoạt động tương tự các shell khác như bash hay zsh, nhưng những khác biệt chính có thể tìm bằng mục “unlike other shells” đã được tổng hợp trong hướng dẫn chính thức
  • Đường dẫn cài đặt được chia theo từng nền tảng; trên macOS hỗ trợ Homebrew, MacPorts, trình cài đặt từ fishshell.com và ứng dụng độc lập
    • Phiên bản macOS được hỗ trợ tối thiểu là 10.12
    • Các gói Debian, Fedora, openSUSE, Red Hat Enterprise Linux/CentOS cho Linux được cung cấp qua openSUSE Build Service
    • Có thể cài gói Ubuntu thông qua fish PPA
    • Trên Windows 10/11 có thể cài bằng quy trình bản phân phối Linux của WSL hoặc tự build từ mã nguồn; mọi phiên bản Windows đều hỗ trợ cài qua Cygwin hoặc MSYS2
  • Sau khi cài đặt, chỉ cần chạy fish trong shell hiện tại để bắt đầu sử dụng; có thể xem tài liệu người dùng qua lệnh help trong fish và tài liệu chính thức
  • Để chạy, cần các tiện ích POSIX cơ bản và những tiện ích hệ thống *nix thông dụng như mktemp; một số tính năng tùy chọn sẽ cần thêm công cụ riêng
    • Tính năng tạo tự động hoàn thành dựa trên trang hướng dẫn và công cụ cấu hình web fish_config cần Python 3.5+
    • Tích hợp clipboard hệ thống cần một trong các công cụ xsel, xclip, wl-copy/wl-paste, pbcopy/pbpaste
    • Hoàn thành đầy đủ cho yarnnpm cần mô-đun NPM all-the-package-names
  • Việc build từ mã nguồn cần Rust 1.85 trở lên, CMake 3.15 trở lên và trình biên dịch C; PCRE2 và gettext được xử lý như các phụ thuộc tùy chọn
  • Hỗ trợ cả build bằng CMake và Cargo; bản build Cargo đặt tệp nhị phân độc lập vào ~/.cargo/bin/, còn cài đặt đầy đủ bằng CMake cung cấp man page ở vị trí chuẩn, bản sao cục bộ của tài liệu HTML, cùng các tùy chọn thư mục bổ sung cho hàm, hoàn thành và cấu hình

2 bình luận

 
joyfui 2023-08-28

Hiện tôi đang dùng zsh, nhưng lần tới có dịp thì chắc cũng nên thử dùng fish xem sao.

 
GN⁺ 2023-08-28
Ý kiến trên Hacker News
  • Ưu điểm lớn nhất của fish là hầu như không cần cấu hình. Tôi 41 tuổi, có gia đình, nên hoàn toàn không còn kiên nhẫn để phí thời gian cấu hình công cụ; còn zsh thì lần nào tôi cố làm cho nó dùng ổn cũng có cảm giác nó cản trở mình
    Nhiều script zsh cũng khó có thể gọi là vững chắc; nếu dùng shell thường xuyên, rốt cuộc bạn sẽ gặp các trường hợp biên mà những mớ script người dùng chủ yếu được cóp nhặt từ đâu đó không xử lý được
    dotfiles fish của tôi là https://github.com/mattgreen/dotfiles/tree/master/fish, chỉ có hệ thống plugin dựa trên submodule, prompt git bất đồng bộ, alias và vài biến môi trường
    fish gần như đã cung cấp sẵn mọi thứ nên không cần bảo trì, và giờ điều duy nhất tôi mong muốn là biến prompt bất đồng bộ thành tính năng hạng nhất, vì do phải theo dõi trạng thái nên việc này để shell đảm nhiệm sẽ tốt hơn code người dùng

    • Tôi dùng bash và cũng không kiên nhẫn cấu hình công cụ, nhưng dotfiles fish kia trông còn phức tạp hơn cấu hình bash của tôi. Trước đây nhiều kỹ sư khác trong nhóm dùng fish, nhưng tôi chưa thấy fish làm được điều gì mà bash không làm được; nó chỉ trông hào nhoáng hơn một chút
      Điều khó chịu hơn là khi họ nhờ trợ giúp, các lệnh tôi chỉ cho họ đều không chạy được trong fish, khiến việc xử lý sự cố chậm đi rất nhiều
    • Gần 10 năm trước tôi chỉ chạy trình hướng dẫn cấu hình ban đầu của zsh đúng một lần[1], mất khoảng 5–10 phút. Tôi không hiểu hoàn toàn từng lệnh có nghĩa gì, nhưng từ đó đến nay chưa sửa lần nào và nó vẫn chạy tốt
      Phần lớn cấu hình zsh còn lại là tiện ích prompt và những thứ tôi thêm trong vài năm qua; tôi không dùng cũng không cần plugin. Nếu cần, zplug mà tôi từng thử trước đây thật sự rất dễ cấu hình và sử dụng
      [1]: https://github.com/mid-kid/config/blob/master/shell/.zshrc#L...
    • Đồng ý gần như hoàn toàn. Nếu không phải vì công việc buộc phải viết script tương thích /bin/sh, tôi đã chuyển sang Fish vì những lý do tương tự
      Xét về trải nghiệm người dùng, nó vượt xa các shell khác, và thật đáng ngạc nhiên là nó chưa được chọn làm mặc định trên các hệ điều hành như Mac. Với Fish, tôi có thể hướng dẫn người nhà làm việc trong terminal mà không ai bực bội hay bỏ cuộc; với các shell khác thì khó nói vậy
    • Phần cấu hình zsh cứ cản trở tôi thì oh-my-zsh đã cứu vãn. Tôi chỉ giữ một dotfile rất nhỏ, ủy thác phần lớn cấu hình cho omz, và đặt nó trong một bare repo để clone trên mỗi máy mới
      Vài năm trước tôi mất khoảng một giờ để chọn plugin muốn dùng và tạo repo, giờ máy mới chỉ cần 5–10 phút là sẵn sàng
    • Nếu đã cấu hình zsh theo ý mình rồi, tôi tò mò khi chuyển sang fish thì sẽ có cải thiện hay thay đổi gì
  • Tôi dùng Fish làm login shell hơn 10 năm rồi, và khác với nhiều người, tôi cũng dùng nó cho scripting. Với các tác vụ đơn giản, nó có ít bẫy hơn bash nên viết script dễ chịu hơn nhiều
    Khi đọc hướng dẫn trên mạng, chuyển các ví dụ bash sang fish là việc nhỏ. Tôi không hiểu vì sao người ta coi đó là vấn đề, và thực tế tôi chưa từng gặp rắc rối vì nó

    • Một điều khiến tôi chưa thể dùng nó cho scripting thường xuyên hơn là thiếu chế độ thất bại khi có lỗi như set -e của bash. Tôi biết rất khó để làm cho nó hoạt động đúng trong mọi trường hợp, chẳng hạn cả pipefail, nhưng tôi không muốn viết nhiều script nếu thiếu tính năng này
  • Tôi đã dùng fish khoảng 5 năm và giờ không muốn quay lại nữa. Không cần cài thêm bất kỳ tính năng nào, trạng thái mặc định của nó đã làm được tất cả những gì cấu hình zsh cũ của tôi từng làm sau khi gắn thêm cả trình quản lý gói lẫn plugin
    Thứ duy nhất tôi đổi là thêm spacefish, và giờ là starship.rs

    • Tôi cũng từng đi theo hướng đó, nhưng gần đây đã chuyển sang Tide prompt. Nó viết bằng fish thuần và nhanh đến mức thật sự đáng kinh ngạc
    • z cũng đáng thử. Và hiện tôi không xem được cấu hình của mình, nhưng có một plugin thông báo khi lệnh chạy nền lâu kết thúc, khá hữu ích
    • Tôi tò mò bạn dùng starship vào việc gì. Nó trông thú vị, nhưng tôi không rõ cần tưởng tượng thế nào để tận dụng đúng tiềm năng của nó
    • Tìm kiếm ngược giờ đã được hỗ trợ chưa? Tôi không quan tâm đến tự động hoàn thành
    • Bạn đã phải chuyển đổi các script hiện có sang fish à? Hay có cách tự động nào không?
  • Đã lâu rồi nên tôi thử gom các thread liên quan. Còn thread nào nữa không?
    What's Happening with Fish Releases? - https://news.ycombinator.com/item?id=36875727 - tháng 7 năm 2023
    My shell setup with Fish and Tmux (2021) - https://news.ycombinator.com/item?id=35672358 - tháng 4 năm 2023
    Ask HN: Are alternative (oil, nu, etc.) shells usable as daily drivers? - https://news.ycombinator.com/item?id=34722208 - tháng 2 năm 2023
    Rewrite it in Rust - https://news.ycombinator.com/item?id=34588340 - tháng 1 năm 2023
    Fish 3.6.0 - https://news.ycombinator.com/item?id=34298157 - tháng 1 năm 2023
    Fish Shell 3.5.0 - https://news.ycombinator.com/item?id=31768405 - tháng 6 năm 2022
    Fish 3.4.0 - https://news.ycombinator.com/item?id=30734072 - tháng 3 năm 2022
    Fish 3.4.0 Released - https://news.ycombinator.com/item?id=30660587 - tháng 3 năm 2022
    Ask HN: Oil or Fish Shell? - https://news.ycombinator.com/item?id=30154652 - tháng 1 năm 2022
    The fish shell is amazing - https://news.ycombinator.com/item?id=29341390 - tháng 11 năm 2021
    Nsh: A fish/bash-like Posix shell in Rust - https://news.ycombinator.com/item?id=28967257 - tháng 10 năm 2021
    Fish Shell 3.3 - https://news.ycombinator.com/item?id=27663637 - tháng 6 năm 2021
    Fish shell - https://news.ycombinator.com/item?id=27180420 - tháng 5 năm 2021
    Fish Shell 3.2 - https://news.ycombinator.com/item?id=26302678 - tháng 3 năm 2021
    Fish is not operational on a VT220 terminal (2015) - https://news.ycombinator.com/item?id=25526237 - tháng 12 năm 2020
    New Features in the Fish Shell - https://news.ycombinator.com/item?id=24631138 - tháng 9 năm 2020
    Dolphins learn from their peers to use empty shells to catch fish - https://news.ycombinator.com/item?id=23660910 - tháng 6 năm 2020
    Fish Shell 3.1.0 - https://news.ycombinator.com/item?id=22314671 - tháng 2 năm 2020
    Fish: A command line shell for the 90s - https://news.ycombinator.com/item?id=21361696 - tháng 10 năm 2019
    Show HN: Fisher 3.0 – the package manager for the fish-shell - https://news.ycombinator.com/item?id=18920972 - tháng 1 năm 2019
    Fish shell 3.0 - https://news.ycombinator.com/item?id=18776765 - tháng 12 năm 2018
    Fish: A user-friendly command line shell for macOS, Linux, etc - https://news.ycombinator.com/item?id=15910897 - tháng 12 năm 2017
    Fish (Shell) for a Week - https://news.ycombinator.com/item?id=14422672 - tháng 5 năm 2017

Why I'm Hooked on Fish Shell (and How to Set It Up Right) - https://news.ycombinator.com/item?id=14417046 - tháng 5 năm 2017
The fish shell is awesome - https://news.ycombinator.com/item?id=14179081 - tháng 4 năm 2017
Fish Shell Design Principles - https://news.ycombinator.com/item?id=11102941 - tháng 2 năm 2016
Fish shell 2.2 - https://news.ycombinator.com/item?id=9873090 - tháng 7 năm 2015
Fish shell - https://news.ycombinator.com/item?id=9566441 - tháng 5 năm 2015
FISH Shell: A dynamic shell - https://news.ycombinator.com/item?id=8783150 - tháng 12 năm 2014
Fish shell 2.1 - https://news.ycombinator.com/item?id=6626635 - tháng 10 năm 2013
fish shell - https://news.ycombinator.com/item?id=6224524 - tháng 8 năm 2013
Fish shell 2.0 - https://news.ycombinator.com/item?id=5723235 - tháng 5 năm 2013
Fish 2.0 shell beta - https://news.ycombinator.com/item?id=5567639 - tháng 4 năm 2013
Fish: Finally, a command line shell for the 90s - https://news.ycombinator.com/item?id=4073162 - tháng 6 năm 2012
Fish sucks (but your shell sucks more) - https://news.ycombinator.com/item?id=2031110 - tháng 12 năm 2010
Fish - The friendly interactive shell - https://news.ycombinator.com/item?id=820677 - tháng 9 năm 2009
Fish Shell: A User-Friendly Shell or Like a Heavily Customized zsh - https://news.ycombinator.com/item?id=811113 - tháng 9 năm 2009

  • https://news.ycombinator.com/item?id=23660910 có lẽ là một liên kết bẫy để xem ai đang theo dõi :)

  • Tôi từng dùng thử zsh một thời gian, nhưng ở trạng thái mặc định thì thực ra nó gần giống bash, và tôi có ấn tượng rằng muốn thấy ưu điểm thì phải bỏ thời gian tùy biến. Tôi không muốn tốn thời gian cho cấu hình shell, chỉ muốn nó chạy tốt ngay
    Fish tốt hơn bash thấy rõ dù không cần cấu hình gì, và tự động hoàn thành như phép màu thì gần như thay đổi cuộc sống

  • Hồi đại học tôi dùng fish trên Ubuntu, và chiếc MacBook nhận ở công việc đầu tiên cũng được cấu hình dùng fish. Khi đó chỉ có một người phụ trách DevOps, mà tài liệu thiết lập ứng dụng và script chỉ viết cho zsh hoặc bash; thành thật mà nói tôi đã nghĩ chuyển sang zsh cũng được
    Nhưng người đó ngăn tôi lại, rồi dành nửa ngày học fish và thêm cả script fish vào tài liệu. Thật sự là một người đáng biết ơn

  • Điểm hay của fish là ngay từ đầu nó đã cung cấp khá nhiều tính năng tiện lợi mà không cần cài plugin. Tôi chỉ thêm starship.rs và tích hợp fzf

    • Trong bash thường cũng làm hai thứ đó mà?
    • Vì sao cần starship.rs?
  • Tôi rất thích tagline của fish, và nó khá buồn cười. Tôi đã dùng một thời gian và thấy đủ ổn, nhưng về chiến lược phát triển thì họ chủ ý tránh các tùy chọn có thể cấu hình
    Có vài thứ cứ làm tôi khó chịu, nhưng không có cách đổi hành vi, nên tôi chuyển sang zsh và làm cho nó hoạt động giống fish nhưng theo cách mình muốn. Với tôi đó là quyết định đúng và đáng khuyên dùng. Tôi cũng không thích oh-my-zsh hay trình quản lý plugin cho lắm

    • Bạn có thể nói rõ hơn điều gì làm bạn khó chịu không? Không phải để chỉ trích, chỉ là tò mò thôi
      Tôi dùng fish, zsh, và giờ cả elvish nữa; điều quan trọng với tôi là gợi ý tự động và khả năng lấy lịch sử bằng phím mũi tên lên. zsh có mô-đun gợi ý tự động, còn elvish có lịch sử bằng mũi tên lên nhưng chỉ khớp phần đầu
      Vì vậy fish vẫn dẫn trước, còn elvish đứng thứ hai vì việc nhập lệnh rồi nhấn mũi tên lên một lần gần như cho cảm giác như gợi ý tự động. Tôi chưa tìm được cách làm việc đó trong zsh, và về xử lý khối lệnh thì tôi cũng thích cách của fish và elvish hơn phong cách truyền thống của họ sh
  • Sai lầm lớn nhất của fish là không tương thích với bash. Tôi đã quá quen với bash, và trong một số hệ thống ở công ty chỉ có thể truy cập bash, không thể cài fish, nên tôi không muốn đổi
    Việc phải qua lại liên tục giữa các ngôn ngữ scripting khác nhau rất khổ, và có lẽ sẽ không thể làm thoải mái bằng trí nhớ cơ bắp

    • Chỉ cần đặt #!/bin/bash ở đầu script và tiếp tục scripting bằng bash, còn shell tương tác thì dùng fish, không được sao?
    • Tôi dùng fish cho tác vụ tương tác và bash cho scripting. Nếu là script mà tôi không muốn viết bằng bash, tôi sẽ dùng một ngôn ngữ lập trình thật sự như Python hoặc Ruby
    • Chừng nào không dùng câu điều kiện và vòng lặp thì bạn gần như sẽ không cảm thấy nó không phải bash
      Cá nhân tôi hầu như không đưa những thứ phức tạp như vậy vào shell; đến mức đó thì tôi tách ra thành script
    • Dùng bass thì tôi thấy không còn mấy nhu cầu phải chuyển đổi
      https://github.com/edc/bass
    • Đó không phải sai lầm mà là cốt lõi của fish. Không thể tạo ra một ngôn ngữ shell scripting tỉnh táo nếu không bỏ tính tương thích POSIX
  • Tôi không dùng fish, nhưng nó có một tính năng tuyệt vời mà zsh vẫn chưa sao chép được. Nó tạo tự động hoàn thành từ trang man, nên gần như với mọi chương trình bạn đều tự động có được hoàn thành cơ bản cho các flag