2 คะแนน โดย GN⁺ 2023-08-28 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • fish เป็นเชลล์บรรทัดคำสั่งที่ใช้งานง่าย ทำงานบน macOS, Linux และระบบตระกูลที่เกี่ยวข้อง โดยมีการไฮไลต์ไวยากรณ์ คำแนะนำอัตโนมัติระหว่างพิมพ์ และการเติมคำด้วยแท็บให้ใช้ได้ทันทีโดยไม่ต้องตั้งค่าเพิ่มเติม
  • โดยทั่วไปทำงานคล้ายกับเชลล์อื่นอย่าง bash หรือ zsh แต่ความแตกต่างสำคัญที่ค้นหาได้ด้วยคำว่า “unlike other shells” ได้ถูกรวบรวมไว้ในบทแนะนำอย่างเป็นทางการ
  • เส้นทางการติดตั้งแยกตามแพลตฟอร์ม โดยบน macOS รองรับ Homebrew, MacPorts, ตัวติดตั้งจาก fishshell.com และแอปแบบสแตนด์อโลน
    • เวอร์ชัน macOS ขั้นต่ำที่รองรับคือ 10.12
    • แพ็กเกจสำหรับ Debian, Fedora, openSUSE, Red Hat Enterprise Linux/CentOS บน Linux มีให้ผ่าน openSUSE Build Service
    • แพ็กเกจ Ubuntu สามารถติดตั้งได้ผ่าน fish PPA
    • บน Windows 10/11 สามารถติดตั้งได้ตามขั้นตอนของดิสโทร Linux บน WSL หรือบิลด์จากซอร์ส และบน Windows ทุกเวอร์ชันรองรับการติดตั้งผ่าน Cygwin หรือ MSYS2
  • หลังติดตั้ง ให้เริ่มใช้งานโดยรัน fish ในเชลล์ปัจจุบัน และสามารถดูเอกสารผู้ใช้ได้จากคำสั่ง help ภายใน fish รวมถึงเอกสารอย่างเป็นทางการ
  • การรันต้องใช้ยูทิลิตี POSIX พื้นฐานและยูทิลิตีระบบ *nix ทั่วไป เช่น mktemp ส่วนฟีเจอร์เสริมบางอย่างต้องใช้เครื่องมือเพิ่มเติม
    • การสร้างการเติมคำอัตโนมัติจากหน้า manual และเครื่องมือตั้งค่าผ่านเว็บ fish_config ต้องใช้ Python 3.5+
    • การเชื่อมรวมกับคลิปบอร์ดของระบบต้องใช้หนึ่งใน xsel, xclip, wl-copy/wl-paste, pbcopy/pbpaste
    • การเติมคำแบบครบถ้วนสำหรับ yarn และ npm ต้องใช้โมดูล NPM all-the-package-names
  • การบิลด์จากซอร์สต้องใช้ Rust 1.85 ขึ้นไป, CMake 3.15 ขึ้นไป และคอมไพเลอร์ C โดย PCRE2 และ gettext ถือเป็น dependency แบบเลือกใช้
  • รองรับทั้งการบิลด์ด้วย CMake และ Cargo โดยการบิลด์ด้วย Cargo จะวางไบนารีแบบสแตนด์อโลนไว้ที่ ~/.cargo/bin/ ส่วนการติดตั้งแบบเต็มด้วย CMake จะมี man page ในตำแหน่งมาตรฐาน สำเนาเอกสาร HTML ในเครื่อง และตัวเลือกไดเรกทอรีสำหรับฟังก์ชัน การเติมคำ และการตั้งค่าเพิ่มเติม

2 ความคิดเห็น

 
joyfui 2023-08-28

ตอนนี้ผมใช้ zsh อยู่ แต่ถ้ามีโอกาสครั้งหน้าก็อยากลองใช้ fish ดูสักครั้งเหมือนกัน

 
GN⁺ 2023-08-28
ความคิดเห็นจาก Hacker News
  • ข้อดีที่ใหญ่ที่สุดของ fish คือ แทบไม่ต้องตั้งค่าอะไรเลย ผมอายุ 41 แล้ว มีครอบครัวด้วย จึงไม่มีความอดทนจะเสียเวลากับการตั้งค่าเครื่องมือเลย และทุกครั้งที่พยายามทำให้ zsh ใช้งานได้ถูกใจ ก็รู้สึกเหมือนมันคอยขวางอยู่เสมอ
    สคริปต์ zsh หลายตัวก็พูดได้ยากว่าแข็งแรงทนทาน และถ้าใช้เชลล์บ่อย ๆ สุดท้ายก็จะเจอ edge case ที่ชุดสคริปต์ผู้ใช้ซึ่งส่วนใหญ่ที่มามักเป็นการคัดลอกแปะ จัดการไม่ครอบคลุม
    fish dotfiles ของผมอยู่ที่ https://github.com/mattgreen/dotfiles/tree/master/fish มีแค่ระบบปลั๊กอินแบบใช้ submodule, git prompt แบบอะซิงโครนัส, alias และ environment variable ไม่กี่ตัว
    fish ให้มาแทบครบอยู่แล้ว จึงไม่ต้องบำรุงรักษาอะไร และตอนนี้สิ่งเดียวที่อยากได้คือให้ prompt แบบอะซิงโครนัส กลายเป็นฟีเจอร์ระดับ first-class เพราะเรื่องการติดตามสถานะเป็นสิ่งที่เชลล์ควรรับผิดชอบมากกว่าโค้ดของผู้ใช้

    • ผมใช้ bash และก็ไม่มีความอดทนกับการตั้งค่าเครื่องมือเหมือนกัน แต่ fish dotfiles นั่นดูซับซ้อนกว่าการตั้งค่า bash ของผมเสียอีก เมื่อก่อนวิศวกรคนอื่น ๆ ในทีมใช้ fish กันเยอะ แต่ผมไม่เคยเห็นว่า fish ทำอะไรที่ bash ทำไม่ได้ มีแค่ดูหวือหวากว่านิดหน่อย
      ที่น่าหงุดหงิดกว่าคือเวลาพวกเขาขอความช่วยเหลือ คำสั่งที่ผมบอกไปใช้ใน fish ไม่ได้สักคำสั่ง ทำให้ การแก้ปัญหาช้ามาก
    • เกือบ 10 ปีก่อน ผมผ่านตัวช่วยตั้งค่าเริ่มต้นของ zsh แค่ครั้งเดียว[1] ใช้เวลาประมาณ 5–10 นาที แม้จะไม่ได้เข้าใจทั้งหมดว่าคำสั่งแต่ละอันหมายถึงอะไร แต่หลังจากนั้นก็ไม่เคยแก้ไขอีก และมันก็ทำงานได้ดี
      การตั้งค่า zsh ที่เหลือส่วนใหญ่เป็น prompt utility กับสิ่งที่เพิ่มเข้ามาตลอดหลายปี และผมไม่ได้ใช้หรือจำเป็นต้องใช้ปลั๊กอินเลย ถ้าจำเป็น zplug ที่เคยลองใช้มาก่อนก็ตั้งค่าและใช้ง่ายจริง ๆ
      [1]: https://github.com/mid-kid/config/blob/master/shell/.zshrc#L...
    • เห็นด้วยแทบทั้งหมด ถ้าไม่ใช่เพราะงานบังคับให้ต้องเขียนสคริปต์ที่เข้ากันได้กับ /bin/sh ผมก็คงย้ายไป Fish ด้วยเหตุผลคล้าย ๆ กัน
      ในมุมมองของ ประสบการณ์ผู้ใช้ มันนำหน้าเชลล์อื่นแบบทิ้งห่าง และน่าแปลกใจที่ระบบปฏิบัติการอย่าง Mac ยังไม่เลือกเป็นค่าเริ่มต้น ถ้าใช้ Fish ผมสามารถแนะนำคนในครอบครัวให้ทำงานในเทอร์มินัลได้โดยไม่มีใครหงุดหงิดหรือถอดใจ แต่กับเชลล์อื่นพูดแบบนั้นได้ยาก
    • เรื่องที่การตั้งค่า zsh คอยขวางผมนั้น oh-my-zsh ช่วยไว้ได้ ผมมี dotfile เล็กมาก ๆ ที่มอบการตั้งค่าส่วนใหญ่ให้ omz แล้วเก็บไว้ใน bare repo ที่ clone ไปยังเครื่องใหม่ทุกเครื่อง
      เมื่อหลายปีก่อน ผมใช้เวลาประมาณหนึ่งชั่วโมงเลือกปลั๊กอินที่ต้องการและสร้าง repo ตอนนี้เครื่องใหม่ใช้เวลา 5–10 นาทีก็พร้อมแล้ว
    • ถ้าตั้งค่า zsh ไว้ถูกใจอยู่แล้ว ผมสงสัยว่าถ้าเปลี่ยนไป fish จะมีการปรับปรุงหรือเปลี่ยนแปลงอะไรบ้าง
  • ผมใช้ Fish เป็น login shell มานานกว่า 10 ปีแล้ว และต่างจากหลายคน ผมใช้มันกับ การเขียนสคริปต์ ด้วย สำหรับงานง่าย ๆ มันมีหลุมน้อยกว่า bash จึงเขียนสคริปต์ได้ดีกว่ามาก
    เวลาอ่านคำอธิบายออนไลน์ การแปลงตัวอย่าง bash ไปเป็น fish เป็นเรื่องเล็กน้อย ผมไม่เข้าใจว่าทำไมถึงบอกว่านั่นเป็นปัญหา และจริง ๆ แล้วไม่เคยลำบากเพราะเรื่องนี้เลย

    • สิ่งหนึ่งที่ขวางไม่ให้ใช้กับการเขียนสคริปต์บ่อยกว่านี้คือไม่มี โหมดล้มเหลวเมื่อเกิดข้อผิดพลาด แบบ set -e ของ bash ผมเข้าใจว่าทำให้มันทำงานได้ดีในทุกกรณี เช่น รวมถึง pipefail ด้วยนั้นยาก แต่ถ้าไม่มีฟีเจอร์นี้ ผมก็ไม่อยากเขียนสคริปต์จำนวนมาก
  • ผมใช้ fish มาประมาณ 5 ปีแล้ว และตอนนี้ไม่อยากกลับไปอีก ต่อให้ไม่ติดตั้งฟีเจอร์เสริมใด ๆ เลย สถานะเริ่มต้นของมันก็ทำทุกอย่างที่การตั้งค่า zsh เดิมของผมซึ่งเคยผูกทั้ง package manager และปลั๊กอินไว้ทำได้ครบ
    สิ่งที่เปลี่ยนมีแค่เพิ่ม spacefish และตอนนี้เพิ่ม starship.rs เท่านั้น

    • ผมก็เดินเส้นทางเดียวกัน แต่ช่วงหลังย้ายไปใช้ Tide prompt มันเขียนด้วย fish ล้วน ๆ และเร็วอย่างน่าทึ่งจริง ๆ
    • z ก็น่าลองใช้เช่นกัน และตอนนี้ผมดูการตั้งค่าไม่ได้ แต่มีปลั๊กอินที่แจ้งเตือนเมื่อคำสั่งเบื้องหลังที่รันนาน ๆ เสร็จ ซึ่งค่อนข้างมีประโยชน์
    • อยากรู้ว่าใช้ starship เพื่ออะไร ดูน่าสนใจ แต่ไม่แน่ใจว่าต้องจินตนาการแบบไหนถึงจะใช้ศักยภาพของมันได้เต็มที่
    • ตอนนี้รองรับ reverse search แล้วหรือยัง? ผมไม่สนใจ auto-complete
    • ต้องแปลงสคริปต์เดิมเป็น fish ไหม? หรือมีวิธีอัตโนมัติหรือเปล่า?
  • ไม่ได้ติดตามมานาน เลยลองรวบรวมเธรดที่เกี่ยวข้องไว้ มีอีกไหม?
    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 อยู่ช่วงหนึ่ง แต่ในสถานะพื้นฐานจริง ๆ ก็คล้าย bash และรู้สึกว่าถ้าจะเห็นข้อดีต้องใช้เวลาปรับแต่งเอง ไม่อยากเสียเวลากับการตั้งค่าเชลล์ แค่อยากให้มันใช้งานได้ทันที
    Fish ดีกว่า bash อย่างเห็นได้ชัดแม้ไม่ตั้งค่าอะไรเลย และ การเติมคำอัตโนมัติที่เหมือนเวทมนตร์ ก็ถึงขั้นเปลี่ยนชีวิตได้

  • ตอนมหาวิทยาลัยใช้ fish บน Ubuntu และ MacBook ที่ได้จากงานแรกก็ตั้งค่าเป็น fish ด้วย ตอนนั้นมีคนดูแล DevOps แค่คนเดียว แต่เอกสารตั้งค่าแอปกับสคริปต์มีไว้สำหรับ zsh หรือ bash เท่านั้น และพูดตรง ๆ ก็คิดว่าเปลี่ยนไปใช้ zsh ก็ได้
    แต่เขาห้ามไว้ แล้วใช้เวลาครึ่งวันเรียน fish ก่อนจะเพิ่ม สคริปต์ fish ทั้งหมดลงในเอกสารให้ด้วย เป็นคนที่น่าขอบคุณจริง ๆ

  • สิ่งที่ดีของ fish คือแม้ไม่ติดตั้งปลั๊กอินก็มี ฟีเจอร์อำนวยความสะดวก มาให้ค่อนข้างมากตั้งแต่แรกอยู่แล้ว ที่เพิ่มเองมีแค่การเชื่อมกับ starship.rs และ fzf

    • ปกติใน bash ก็ทำสองอย่างนั้นกันไม่ใช่เหรอ?
    • ทำไมถึงต้องใช้ starship.rs?
  • ชอบแท็กไลน์ของ fish มาก และค่อนข้างตลกด้วย เคยใช้มาพักหนึ่งและก็ดีพอสมควร แต่ในเชิงกลยุทธ์การพัฒนา เขาจงใจหลีกเลี่ยงตัวเลือกที่ตั้งค่าได้อย่างชัดเจน
    มีบางอย่างที่รบกวนใจอยู่เรื่อย ๆ แต่ไม่มีวิธีเปลี่ยนพฤติกรรมได้ เลยย้ายไป zsh แล้วทำให้ทำงานเหมือน fish แต่เป็นแบบที่ตัวเองต้องการ สำหรับผมเป็นการตัดสินใจที่ดีและแนะนำได้ ไม่ค่อยชอบ oh-my-zsh หรือ plugin manager ด้วย

    • บอกละเอียดกว่านี้ได้ไหมว่าอะไรที่รบกวนใจ? ไม่ได้จะวิจารณ์ แค่อยากรู้
      ผมใช้ fish, zsh และตอนนี้ใช้ elvish ด้วย สิ่งสำคัญสำหรับผมคือ autosuggestion และฟีเจอร์ดึง history ด้วยปุ่มลูกศรขึ้น zsh มีโมดูล autosuggestion ส่วน elvish มี history จากลูกศรขึ้น แต่จะจับคู่เฉพาะส่วนต้นเท่านั้น
      ดังนั้น fish ยังนำอยู่ และ elvish เป็นอันดับสอง เพราะการพิมพ์คำสั่งแล้วกดลูกศรขึ้นหนึ่งครั้งให้ความรู้สึกแทบเหมือน autosuggestion ผมหาวิธีทำแบบนั้นใน zsh ไม่เจอ และในเรื่องการจัดการ block ก็ชอบวิธีของ fish กับ elvish มากกว่าสไตล์ตระกูล sh แบบดั้งเดิม
  • ข้อผิดพลาดใหญ่ที่สุดของ fish คือ ไม่เข้ากันได้กับ bash คุ้นกับ bash มากเกินไป และระบบของบริษัทบางส่วนเข้าถึงได้แค่ bash และติดตั้ง fish ไม่ได้ เลยไม่อยากเปลี่ยน
    การต้องสลับไปมาระหว่างภาษาสคริปต์ต่างกันเรื่อย ๆ เป็นเรื่องทรมาน และคงทำด้วย muscle memory ได้ไม่สบาย

    • ใส่ #!/bin/bash ไว้บนสุดของสคริปต์ แล้วเขียนสคริปต์ด้วย bash ต่อไป ส่วนเชลล์แบบโต้ตอบก็ใช้ fish อย่างเดียวไม่ได้เหรอ?
    • งานแบบโต้ตอบใช้ fish ส่วนการเขียนสคริปต์ใช้ bash ถ้าเป็นสคริปต์ที่ไม่อยากเขียนด้วย bash ก็ใช้ ภาษาโปรแกรมมิงจริง ๆ อย่าง Python หรือ Ruby
    • ตราบใดที่ไม่ได้ใช้เงื่อนไขกับลูป ก็คงแทบไม่รู้สึกว่ามันไม่ใช่ bash
      ส่วนตัวแทบไม่ใส่อะไรซับซ้อนขนาดนั้นลงในเชลล์ และถ้าไปถึงจุดนั้นก็จะแยกออกมาเป็นสคริปต์
    • ใช้ bass แล้วก็แทบไม่รู้สึกว่าต้องสลับเลย
      https://github.com/edc/bass
    • นั่นไม่ใช่ข้อผิดพลาด แต่เป็นหัวใจของ fish ต่างหาก ถ้าไม่ทิ้ง ความเข้ากันได้กับ POSIX ก็ไม่สามารถสร้างภาษาสคริปต์เชลล์ที่มีสติได้
  • แม้จะไม่ได้ใช้ fish แต่มีฟีเจอร์ยอดเยี่ยมอย่างหนึ่งที่ zsh ยังโคลนตามไม่ได้ คือมันสร้างการเติมคำอัตโนมัติจาก หน้า man ทำให้ได้การเติม flag พื้นฐานโดยอัตโนมัติสำหรับแทบทุกโปรแกรม