

Fish Shell là gì?
Fish (Friendly Interactive Shell) là một Unix shell miễn phí và mã nguồn mở, được thiết kế để thân thiện và dễ sử dụng hơn Bash. Fish nổi bật với syntax highlighting tự động, autosuggestion thông minh dựa trên lịch sử lệnh, và cấu hình không cần file rc phức tạp. Fish không tuân thủ POSIX 100% nhưng bù lại trải nghiệm sử dụng vượt trội. Fish ra mắt vào năm 2008 với mục tiêu thay thế Bash/Zsh bằng trải nghiệm người dùng tốt hơn.
Tại sao nên chuyển từ Bash sang Fish?
- Syntax highlighting: Fish tô màu lệnh real-time — lệnh sai hiển thị đỏ, đường dẫn hợp lệ hiển thị xanh. Bash cần plugin Zsh + Oh My Zsh để làm tương tự.
- Autosuggestion: Fish gợi ý lệnh tiếp theo dựa trên lịch sử, hiển thị dạng xám — nhấn mũi tên phải để accept. Zsh cần pluginautosuggestions riêng.
- Tab completion mạnh: Fish tự tạo gợi ý tab completion từ chính các lệnh trên hệ thống, không cần script completion thủ công. Khi bạn gõ
git comvà nhấn Tab, Fish sẽ gợi ýgit commit. - Cấu hình đơn giản: Fish dùng syntax tự giải thích, không cần escaped quotes hay keyword phức tạp như Bash.
- Web-based configuration: Giao diện cấu hình trực quan tại
http://localhost:8080— thay đổi màu sắc, theme chỉ bằng click chuột. Không cần chỉnh sửa file cấu hình. - Scripting mạnh: Fish có hàm built-in mạnh mẽ cho việc xử lý chuỗi, mảng, JSON.

Cài đặt Fish trên các hệ điều hành
Ubuntu / Debian
sudo apt install fish
macOS
brew install fish
Arch Linux
sudo pacman -S fish
Fedora
sudo dnf install fish
Cài đặt Fisher (package manager cho Fish)
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/nvm.fish
Set Fish làm shell mặc định
chsh -s (which fish)
Sau đó đăng xuất và đăng nhập lại để Fish trở thành shell mặc định.
So sánh Fish với Bash và Zsh
| Tính năng | Bash | Zsh + Oh My Zsh | Fish |
|---|---|---|---|
| Syntax highlighting | Không (cần plugin) | Cần plugin | Tích hợp sẵn |
| Autosuggestion | Không | Cần plugin | Tích hợp sẵn |
| Tab completion | Cơ bản | Mạnh (cần config) | Mạnh (auto-generated) |
| Cấu hình | .bashrc | .zshrc + plugin | Web UI + config file |
| POSIX compatible | Có | Phần lớn | Không hoàn toàn |
| Startup time | Nhanh | Chậm (plugins) | Nhanh |
| Scripting | Mở rộng | Rất mở rộng | Đơn giản nhưng hiệu quả |
| Function syntax | function foo { … } | function foo { … } | function foo; …; end |
| Variable assignment | VAR=value | VAR=value | set VAR value |
| Conditionals | if [[ … ]]; then … fi | if [[ … ]]; then … fi | if test …; …; end |

Các lệnh phổ biến trong Fish
Thay đổi theme
fish_config theme choose Dracula
fish_config theme list — xem danh sách theme có sẵn
Xem lịch sử lệnh
history | grep "docker"
history --search "git" — tìm kiếm tiến trong lịch sử
Tạo alias
Fish dùng cú pháp khác Bash — không cần alias keyword:
abbr -a gp git push (tạo abbreviation thay vì alias)
abbr -a gst git status
abbr -a ls "ls -la"
Fish cũng hỗ trợ alias truyền thống: alias gs='git status'
Environment variable
set -gx EDITOR nvim (thay vì export EDITOR=nvim trong Bash)
set -gx PATH $PATH /opt/bin
Xử lý mảng
set fruits apple banana cherry
echo $fruits[1] — lấy phần tử đầu tiên
Lặp và điều kiện
for file in *.txt; echo $file; end
if test (pwd) = "/home/user"; echo "Home directory"; end
Hạn chế cần lưu ý
- Script Bash truyền thống có thể không chạy được trong Fish — Fish không tuân thủ POSIX shell syntax. Ví dụ:
for i in {1..10}; do echo $i; donekhông hoạt động. - Một số script hệ thống viết bằng
#!/bin/bashvẫn hoạt động bình thường vì chúng chạy riêng. - Cần viết lại
.bashrccác lệnh alias/setup khi chuyển sang Fish. - Một số công cụ DevOps cũ giả định shell là Bash — có thể cần
bash script.shthay vì chỉscript.sh.
Mẹo cấu hình Fish hiệu quả
- Cài đặt Oh My Fish: Giao diện cấu hình mạnh mẽ với hàng chục plugin.
curl -L https://get.oh-my.fish | fish - Thêm plugin tự động hoá: Fisher, Tide hoặc Oh My Fish cho prompt đẹp.
- Sử dụng abbreviation thay vì alias:
abbrnhanh hơn và tương tác tốt hơn với tab completion. - Cấu hình history: Tăng kích thước history để lưu trữ lâu dài.
- Tối ưu hiệu suất: Tắt các plugin không cần thiết khi làm việc trên máy yếu.
So sánh Fish với các shell hiện đại khác
| Shell | Năm ra mắt | Điểm mạnh | Điểm yếu |
|---|---|---|---|
| Fish | 2008 | Syntax highlight, autosuggest, web config | Không hoàn toàn POSIX |
| Zsh | 1990 | Customizable mạnh, plugin system | Cần cấu hình phức tạp |
| Bash | 1989 | Đa dùng nhất, tương thích cao | Cần plugin để hiện đại |
| Elvish | 2015 | Functional programming, structured data | Ecosystem nhỏ |
| Nushell | 2019 | Table-based pipeline, cross-platform | Học sâu, mới mẻ |

Ứng dụng thực tế
Fish được sử dụng rộng rãi trong cộng đồng developer, đặc biệt là những ai muốn trải nghiệm terminal tốt hơn mà không cần cấu hình phức tạp. Một số trường hợp điển hình:
- Developer frontend và backend muốn terminal đẹp, tự động hoàn thành.
- DevOps Engineer cần làm việc nhiều với CLI tools — Fish giúp giảm gõ phím.
- Sinh viên học lập trình — Fish giúp giảm bớt frustation khi học shell basics.
- Những ai chuyển từ macOS sang Linux muốn giữ trải nghiệm terminal tốt (macOS dùng Zsh theo mặc định).
