V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
likre
V2EX  ›  Linux

求解 bash zsh fish 的区别以及会有的影响

  •  
  •   likre · 2022-11-18 10:44:34 +08:00 · 8878 次点击
    这是一个创建于 738 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我目前在用 arch+gnome ,装了 fish 来当默认的 shell 。

    看到一些文章和教程都说推荐用 bash 。但是命令好像都是互通的(和 fish ,都是可执行文件,用什么 shell 调用都一样?)。实在说能感受到的不同是我有个想启动就设值的环境变量,发现 bash 和 fish 语法不同。

    而且 bash 也没有带有高亮和命令补全,都是刚需
    39 条回复    2022-11-18 22:05:33 +08:00
    hefish
        1
    hefish  
       2022-11-18 10:45:46 +08:00
    fish 不支持 vscode 的 remote develop 。。。
    zhanglintc
        2
    zhanglintc  
       2022-11-18 10:49:21 +08:00   ❤️ 3
    如果要写 shell 脚本的话,fish 很多语法应该和 bash 不一样。
    反正习惯用 bash 肯定最好,因为你去操作外面或者别人的机器的时候,大概率是 bash 。
    如果就考虑你自己用,肯定没有机会用别人的电脑。那你用 fish 肯定无所谓。
    zed1018
        3
    zed1018  
       2022-11-18 11:00:06 +08:00
    bash 怎么可能没有命令补全,bash_completion
    hingle
        4
    hingle  
       2022-11-18 11:05:37 +08:00 via iPhone
    不要动 chsh 。直接装 fish ,在 terminal 配置里设成 fish 就行,jetbrains 系列、vscode 等也都有相关配置。
    xiyangzh
        5
    xiyangzh  
       2022-11-18 11:08:42 +08:00
    别用 fish 了, 那个语法跟其他 shell 不一样,烦得要死。fish 的亮点功能,很多都移植 bash 和 zsh 了。
    guanzhangzhang
        6
    guanzhangzhang  
       2022-11-18 11:10:03 +08:00
    如果你是个人开发者,不登录其他机器,你想用啥就用啥,如果你是经常登录其他机器,就老老实实用 bash
    clrss
        7
    clrss  
       2022-11-18 11:14:15 +08:00
    一般用 bash. 同时还用 mac 的话可以换 zsh.

    用用基本功能(completion 、alias 、env)就行了.

    能用 GUI 用 GUI. 复杂脚本用 python 等正经语言.
    cmdOptionKana
        8
    cmdOptionKana  
       2022-11-18 11:15:04 +08:00
    fish 很多自己的语法, 但日常使用学一下写简短脚本也不难(稍长的脚本可以用 python 写), 别人的脚本可以用 `bash abc.sh` 的形式运行.
    huangwei8ku
        9
    huangwei8ku  
       2022-11-18 11:27:26 +08:00
    zsh 好用,我个人一直用这个
    kokutou
        10
    kokutou  
       2022-11-18 11:28:12 +08:00 via Android
    zsh 吧
    cubecube
        11
    cubecube  
       2022-11-18 11:28:33 +08:00
    oh my bash 装一下,基本上就够了。
    我 mac 上本地用 fish ,体感上 fish 速度比较快
    blankmiss
        12
    blankmiss  
       2022-11-18 11:36:01 +08:00
    还是 zsh 或 bash 吧 fish 好像是终端上使用 func 有点问题 在 sh 里面直接指定 bash 去解释就正常
    libook
        13
    libook  
       2022-11-18 11:40:24 +08:00
    语法上会有一些区别,你可以参考这个 https://apple.stackexchange.com/questions/361870/what-are-the-practical-differences-between-bash-and-zsh

    bash 应用最广泛,支持也最广泛,你可以同时装 bash 和其他的 shell ,自己平时手操可以用其他 shell ,跑第三方脚本的时候用 bash ,一般脚本第一行都会写好 hashbang ,可以自动选择 shell 。

    zsh 和 fish 算是两种设计思路吧,zsh 就是可扩展性强,可以搞一堆插件和配置实现各种功能和自定义; fish 则是苹果式的思维,认为一个产品如果让用户折腾的话就是失败设计。

    我个人喜欢自定义,所以用 zsh 比较多,甚至创建了个工具箱 https://github.com/libook/IdleBox
    yazinnnn
        14
    yazinnnn  
       2022-11-18 12:20:28 +08:00
    不懂就是没区别
    ospider
        15
    ospider  
       2022-11-18 12:26:40 +08:00
    个人感觉不错,我从 zsh 迁移到 fish 的体会: https://zhuanlan.zhihu.com/p/441328829
    MrKrabs
        16
    MrKrabs  
       2022-11-18 12:32:59 +08:00
    #!/bin/bash
    v2defy
        17
    v2defy  
       2022-11-18 12:33:35 +08:00 via Android
    个人感觉不好,用了几天 fish 又回到了 zsh 。

    原因是 fish 总是有一些莫名的 bug ,比如当我一条命令执行失败了,第二次想要执行的时候,它就不执行了,很奇怪。
    inhzus
        18
    inhzus  
       2022-11-18 12:44:58 +08:00 via iPhone
    只要熟悉 fish 语法就没啥问题,况且又不是用了 fish 就不能执行 bash 脚本…没遇到过楼上 vscode remote 不能用的情况。
    fish 四年用户
    kongkongyzt
        19
    kongkongyzt  
       2022-11-18 12:46:09 +08:00
    大多数文章都推荐的 zsh 吧,怎么会是默认的 bash 呢
    lijiangang886
        20
    lijiangang886  
       2022-11-18 13:20:51 +08:00
    linux 系统(相对)底层的层面还是 bash ( debian 系搞了个叫 dash 的 bash 子集),这是动不了的
    fish 不兼容 bash ,而且只是缺省配置比较易用,zsh 通过配置也能做到 fish 的功能
    zsh 相对于 bash 可配置性更强但是大部分系统不缺省安装,而且配置起来很复杂,好在有大把现成的配置可以抄
    所以,日常可以用 zsh ,有跨机器需求的脚本还得用 bash
    GiantHard
        21
    GiantHard  
       2022-11-18 13:43:48 +08:00
    可以看看 arch wiki 怎么说: https://wiki.archlinux.org/title/Fish#Setting_fish_as_interactive_shell_only

    > Not setting fish as system wide or user default allows the current Bash scripts to run on startup. It ensures the current user's environment variables are unchanged and are exported to fish which then runs as a Bash child.

    只要合理地设置,使用 fish 作为日常 shell 完全没有问题
    eh
        22
    eh  
       2022-11-18 14:32:52 +08:00
    日常用 fish ,脚本写 bash
    Kiske
        23
    Kiske  
       2022-11-18 14:59:55 +08:00
    zsh 初始化不加载 /etc/profile.d/ 下的所有脚本,如果当作默认终端, 会导致 Fedora flatpak 无法安装应用。
    ztc
        24
    ztc  
       2022-11-18 15:24:44 +08:00
    我也用 fish ,自己写一些 alias
    ztc
        25
    ztc  
       2022-11-18 15:25:20 +08:00
    感觉 fish 比 zsh 速度更快
    initd
        26
    initd  
       2022-11-18 15:41:04 +08:00
    curl -L get-cn.zsh.one | sh
    xiaofami
        27
    xiaofami  
       2022-11-18 16:21:12 +08:00   ❤️ 1
    分享下我在 Manjaro ARM 下使用的 bash 美化方案,进入 github 目录后自动显示分支名,配色也还算好看:

    1. sudo pacman -Sy silver ttf-nerd-fonts-symbols
    2. 创建 ~/.config/silver/silver.toml 文件:

    [[left]]
    name = "status"
    color.background = "black"
    color.foreground = "white"

    [[left]]
    name = "user"
    color.background = "yellow"
    color.foreground = "black"

    [[left]]
    name = "dir"
    color.background = "blue"
    color.foreground = "black"

    [[left]]
    name = "git"
    color.background = "green"
    color.foreground = "black"

    [[left]]
    name = "cmdtime"
    color.background = "magenta"
    color.foreground = "black"

    3. 修改 ~/.bashrc:

    #
    # ~/.bashrc
    #

    # If not running interactively, don't do anything
    [[ $- != *i* ]] && return

    PS1='[\u@\h \W]\$ '

    # configure silver command prompt
    export SILVER_ICONS=nerd
    source <(silver init)

    # source bash aliases
    source ~/.bash_aliases
    tramm
        28
    tramm  
       2022-11-18 16:43:54 +08:00
    日常 fish,zsh 这样的,写脚本,运行其他脚本时 bash. 有的脚本 fish 运行不了,光看提示一半还查不到原因.
    FightPig
        29
    FightPig  
       2022-11-18 17:09:18 +08:00
    以前一直 oh my zsh,后来太卡了,换成 fish 后舒服了
    leeyuzhe
        30
    leeyuzhe  
       2022-11-18 17:19:00 +08:00
    我已经是 oh my zsh 的形状了
    linuxgo
        31
    linuxgo  
       2022-11-18 17:29:10 +08:00
    @zed1018 确实有
    linuxgo
        32
    linuxgo  
       2022-11-18 17:30:02 +08:00
    bash 下 tab 就可以补全命令呀
    shenyuzhi
        33
    shenyuzhi  
       2022-11-18 17:39:24 +08:00
    挑个顺眼的用就行了
    dcsuibian
        34
    dcsuibian  
       2022-11-18 17:52:10 +08:00
    如果刚需的话,用 zsh+oh-my-zsh 呗。

    我熟悉、学习 shell 的主要目的就是熟练 Linux 操作,而 bash 在 Linux 里应用仍然是最广的。肯定要熟练使用.
    我即使用 zsh ,也是当 bash 来用的。(语法大部分兼容)
    v2exe2v
        35
    v2exe2v  
       2022-11-18 18:59:32 +08:00 via iPhone
    ohmyzsh +1
    alexmy
        36
    alexmy  
       2022-11-18 19:37:30 +08:00
    zsh 用 ys 主题,多棒。
    不过有些 shell 脚本在 bash 下面执行正常,在 zsh 下面执行报错。
    youngster
        37
    youngster  
       2022-11-18 21:19:05 +08:00
    bash 原生
    zsh 插件 自定义 比如高亮、主题、历史命令、快捷指令啊等等
    fish 就是一键安装,解决自定义和费事的配置,开箱即用, 支持 zsh 的一些插件和默认功能

    但是,zsh 和 fish 在很多语法上和 bash 有很多的区别,在 bash 通用的世界里,很多开源工具运行是都可能会碰到 bash 命令无法在 fish 和 zsh 环境下执行的问题,所以慎用,关键时刻还得切回 bash
    abowloflrf
        38
    abowloflrf  
       2022-11-18 21:48:48 +08:00
    fish + starship 爽歪歪,要执行 bash 脚本的时候最前面加上 #!/bin/bash 就好了
    nlzy
        39
    nlzy  
       2022-11-18 22:05:33 +08:00
    用 fish 还是会有些影响的,实际使用下来有一点感觉是,网上找到的比较复杂的 one line 的 shell 命令放在 fish 上大概率跑不了的,特别是设置成默认 shell 之后还会导致一些软件不兼容。建议像 #4 说的,不要在 /etc/passwd 里设置默认 shell ,而是在自己常用的终端模拟器上设置。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3821 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:18 · PVG 12:18 · LAX 20:18 · JFK 23:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.