<span id="vexk9"><table id="vexk9"></table></span>

      fishshell

      比 bash 更好用的 shell

      安裝

      # Ubuntu 和 Debian 的安裝方法。
      sudo apt-get install fish
      # Mac 的安裝方法。
      brew install fish
      

      啟動與幫助

      由于 Fish 的語法與 Bash 有很大差異,Bash 腳本一般不兼容。因此,建議不要將 Fish 設為默認 Shell,而是每次手動啟動它。

      # 安裝完成后,就可以啟動 Fish。
      $ fish
      # 使用過程中,如果需要幫助,可以輸入 help 命令
      $ help
      

      彩色顯示

      # 無效命令為紅色
      $ mkd
      # 有效命令為藍色
      $ mkdir
      # 有效路徑會有下劃線。如果沒有下劃線,你就知道這個路徑不存在。
      $ cat ~/somefi 
      

      自動建議

      Fish 會自動在光標后面給出建議,表示可能的選項,顏色為灰色。如果采納建議,可以按下 Control + F 。如果只采納一部分,可以按下 Alt + →

      $ /bin/hostname # 命令建議
      $ grep --ignore-case # 參數建議
      $ ls node_modules # 路徑建議
      

      自動補全

      輸入命令時,Fish 會自動顯示匹配的上一條歷史記錄。如果沒有匹配的歷史記錄,Fish 會猜測可能的結果,自動補全各種輸入。比如,輸入 pyt 再按下 Tab ,就會自動補全為 python 命令。

      Fish 還可以自動補全 Git 分支。

      腳本語法

      if 語句

      if grep fish /etc/shells
          echo Found fish
      else if grep bash /etc/shells
          echo Found bash
      else
          echo Got nothing
      end
      

      switch 語句

      switch (uname)
      case Linux
          echo Hi Tux!
      case Darwin
          echo Hi Hexley!
      case FreeBSD NetBSD DragonFly
          echo Hi Beastie!
      case '*'
          echo Hi, stranger!
      end
      

      while 循環

      while true
          echo "Loop forever"
      end
      

      for 循環

      for file in *.txt
          cp $file $file.bak
      end
      

      函數

      Fish 的函數用來封裝命令,或者為現有的命令起別名。

      function ll
          ls -lhG $argv
      end
      

      上面代碼定義了一個 ll 函數。命令行執行這個函數以后,就可以用 ll 命令替代 ls -lhG。其中,變量 $argv 表示函數的參數。

      function ls
          command ls -hG $argv
      end
      

      上面的代碼重新定義 ls 命令。注意,函數體內的 ls 之前,要加上 command,否則會因為無限循環而報錯。

      提示符

      fish_prompt 函數用于定義命令行提示符(prompt)。

      function fish_prompt
        set_color purple
        date "+%m/%d/%y"
        set_color FF0
        echo (pwd) '>'
        set_color normal
      end
      

      執行上面的函數以后,你的命令行提示符就會變成下面這樣。

      02/06/13
      /home/tutorial > 
      

      配置

      Fish 的配置文件是 ~/.config/fish/config.fish,每次 Fish 啟動,就會自動加載這個文件。Fish 還提供 Web 界面配置該文件。

      $ 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

      set name 'czl' # 設置變量,替代 name=czl
      echo $name
      echo $status # exit status,替代 $?
      env # 環境變量
      set -x MyVariable SomeValue # 替代 export
      set -e MyVariable
      set PATH $PATH /usr/local/bin # 使用 lists 記錄 PATH
      set -U fish_user_paths /usr/local/bin $fish_user_paths # 永久生效
      touch "testing_"(date +%s)".txt" # command subtitution,替代 `date +%s`
      cp file.txt file.txt.bak; and echo 'back success'; or echo 'back fail' # combiner
      functions # 列出 fish 下定義的函數
      

      參考資料

      主站蜘蛛池模板: 成人综合伊人五月婷久久| 色悠久久久久久久综合网伊人| 久久久久久久综合综合狠狠| 亚洲色偷偷偷综合网| 色综合久久久久久久| 伊人色综合一区二区三区| 玖玖爱zh综合伊人久久| 狠狠色综合网站久久久久久久| 一本大道久久a久久精品综合| 天天色天天射综合网| 久久综合狠狠综合久久综合88| 天天综合天天做天天综合| 综合久久国产九一剧情麻豆| 狠狠色丁香久久婷婷综合_中 | 国产91久久综合| 伊人色综合视频一区二区三区| 色综合一区二区三区| 亚洲国产精品综合一区在线| 亚洲综合区小说区激情区| 色天使久久综合网天天| 色综合久久天天综合观看| 97色婷婷成人综合在线观看| 久久久久久久综合日本| 精品综合久久久久久88小说| 色天使久久综合给合久久97色| 亚洲综合久久一本伊伊区| 亚洲国产成人久久综合碰碰动漫3d| 亚洲综合久久夜AV | 色婷婷综合缴情综免费观看| 成人综合婷婷国产精品久久蜜臀| 色爱无码AV综合区| 亚洲综合免费视频| 亚洲婷婷综合色高清在线| 亚洲av日韩综合一区在线观看| 国产成人麻豆亚洲综合无码精品| 精品久久综合1区2区3区激情| 一本色道久久88亚洲综合| 国产激情电影综合在线看 | 激情综合婷婷丁香五月蜜桃| 中文字幕亚洲综合久久菠萝蜜| 狠狠色丁香婷婷综合精品视频|