fishshell
比 bash 更好用的 shell
安裝
1# Ubuntu 和 Debian 的安裝方法。
2sudo apt-get install fish
3# Mac 的安裝方法。
4brew install fish
啓動與幫助
由於 Fish
的語法與 Bash
有很大差異,Bash
腳本一般不兼容。因此,建議不要將 Fish
設爲默認 Shell
,而是每次手動啓動它。
1# 安裝完成後,就可以啓動 Fish。
2$ fish
3# 使用過程中,如果需要幫助,可以輸入 help 命令
4$ help
彩色顯示
1# 無效命令爲紅色
2$ mkd
3# 有效命令爲藍色
4$ mkdir
5# 有效路徑會有下劃線。如果沒有下劃線,你就知道這個路徑不存在。
6$ cat ~/somefi
自動建議
Fish 會自動在光標後面給出建議,表示可能的選項,顏色爲灰色。如果採納建議,可以按下 →
或 Control + F
。如果只採納一部分,可以按下 Alt + →
。
1$ /bin/hostname # 命令建議
2$ grep --ignore-case # 參數建議
3$ ls node_modules # 路徑建議
自動補全
輸入命令時,Fish
會自動顯示匹配的上一條歷史記錄。如果沒有匹配的歷史記錄,Fish
會猜測可能的結果,自動補全各種輸入。比如,輸入 pyt
再按下 Tab
,就會自動補全爲 python
命令。
Fish
還可以自動補全 Git
分支。
腳本語法
if 語句
1if grep fish /etc/shells
2 echo Found fish
3else if grep bash /etc/shells
4 echo Found bash
5else
6 echo Got nothing
7end
switch 語句
1switch (uname)
2case Linux
3 echo Hi Tux!
4case Darwin
5 echo Hi Hexley!
6case FreeBSD NetBSD DragonFly
7 echo Hi Beastie!
8case '*'
9 echo Hi, stranger!
10end
while 循環
1while true
2 echo "Loop forever"
3end
for 循環
1for file in *.txt
2 cp $file $file.bak
3end
函數
Fish
的函數用來封裝命令,或者爲現有的命令起別名。
1function ll
2 ls -lhG $argv
3end
上面代碼定義了一個 ll
函數。命令行執行這個函數以後,就可以用 ll
命令替代 ls -lhG
。其中,變量 $argv
表示函數的參數。
1function ls
2 command ls -hG $argv
3end
上面的代碼重新定義 ls
命令。注意,函數體內的 ls
之前,要加上 command
,否則會因爲無限循環而報錯。
提示符
fish_prompt
函數用於定義命令行提示符(prompt)。
1function fish_prompt
2 set_color purple
3 date "+%m/%d/%y"
4 set_color FF0
5 echo (pwd) '>'
6 set_color normal
7end
執行上面的函數以後,你的命令行提示符就會變成下面這樣。
102/06/13
2/home/tutorial >
配置
Fish 的配置文件是 ~/.config/fish/config.fish
,每次 Fish
啓動,就會自動加載這個文件。Fish 還提供 Web 界面配置該文件。
1$ fish_config # 瀏覽器打開 Web 界面配置
Running Commands: 兼容 bash 等shell的命令執行方式
Getting Help: help/man cmd -> browser/terminal
Syntax Highlighting: 實時檢查命令是否正確
Wildcards: 支持縮寫 *
遞歸 匹配
Pipes and Redirections: 使用 ^
代表 stderr
Autosuggestions: 自動建議, 可以使用 Ctrl-f / ->
來補全
Tab Completions: 更強大的 tab 補全
Variables: 使用 set 設置
Exit Status: 使用 echo $status
替代 $?
Exports (Shell Variables)
Lists: all variables in fish are really lists
Command Substitutions: 使用 (cmd)
來執行命令, 而不是 反引號、$()
Combiners (And, Or, Not): 不支持使用符合來表示邏輯運算
Functions:使用 $argv
替代 $1
Conditionals (If, Else, Switch) / Functions / Loops: 更人性化的寫法(參考 py)
Prompt: function fish_prompt
實現
Startup (Where's .bashrc?): ~/.config/fish/config.fish
,更好的方式是 autoloading-function、universal-variables
Autoloading Functions: ~/.config/fish/functions/.
Universal Variables:a variable whose value is shared across all instances of fish
1set name 'czl' # 設置變量,替代 name=czl
2echo $name
3echo $status # exit status,替代 $?
4env # 環境變量
5set -x MyVariable SomeValue # 替代 export
6set -e MyVariable
7set PATH $PATH /usr/local/bin # 使用 lists 記錄 PATH
8set -U fish_user_paths /usr/local/bin $fish_user_paths # 永久生效
9touch "testing_"(date +%s)".txt" # command subtitution,替代 `date +%s`
10cp file.txt file.txt.bak; and echo 'back success'; or echo 'back fail' # combiner
11functions # 列出 fish 下定義的函數
參考資料
- fish-shell官網來源:https://github.com/jaywcjlove/linux-command
版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
- 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。