V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Feiox
V2EX  ›  程序员

将日常 shell 切换到 fish 将会遇到那些坑?

  •  
  •   Feiox ·
    feiox · 2015-11-16 14:16:17 +08:00 · 8534 次点击
    这是一个创建于 3076 天前的主题,其中的信息可能已经有所发展或是发生改变。

    弃 bash 转 zsh 只因补全,现在想转 fish 还是因补全!

    那么,平时 shell python 脚本执行依然用 bash ,只是在 iterm2 中使用,会不会有些坑呢?
    会不会有些命令会有不兼容的问题呢?

    18 条回复    2015-11-17 18:21:47 +08:00
    Feiox
        1
    Feiox  
    OP
       2015-11-16 14:16:42 +08:00
    据说, fish 是 90 后专用 fish 。。。。。。囧
    windyboy
        2
    windyboy  
       2015-11-16 14:22:05 +08:00
    环境变量
    weakish
        3
    weakish  
       2015-11-16 14:37:11 +08:00
    > 平时 shell python 脚本执行依然用 bash

    Python 的 subprocess 貌似是 /bin/sh ,一般也不会把 /bin/sh 软链到 fish

    > 会不会有些命令会有不兼容的问题呢?

    会。
    nekoyaki
        4
    nekoyaki  
       2015-11-16 16:04:33 +08:00
    bash 里预先写好的环境变量可能继承不过来,需要你自己想办法,比如在 fish 里写,或者先启动 bash 再调用 fish 。
    再就是如果你 alias 了命令, fish 里是继承不了的,只能自己写 fish 的 function 。
    另外有些命令的特定参数形式,在 fish 下不能用,比如 golang 的一些命令;但是大多数问题不大。
    yujia
        5
    yujia  
       2015-11-16 16:18:55 +08:00
    你需要自己实现一下 sudo !!
    还有就是 $$ 不是进程显示 pid 了
    再还有就是执行一条命令 bash 里面是``扩起来,在 fish 里是圆括号。
    如 chomd `whoami` 你得改成 chmod (whoami)
    leopku
        6
    leopku  
       2015-11-16 17:31:06 +08:00
    补全何须 fish

    推荐 prezto
    harry890829
        7
    harry890829  
       2015-11-16 17:33:19 +08:00
    我用 zsh 主要原因还是因为……在 shell 下打文件名,终于不用区分大小写了
    lightening
        8
    lightening  
       2015-11-16 17:38:01 +08:00
    一些 hijack shell 命令的工具不能用了
    wikinee
        9
    wikinee  
       2015-11-16 17:42:27 +08:00
    @leopku 你们说的我都没听过,我就 zsh 还有时候会有奇怪的问题( ubuntu )下,后来发现 ubuntu 也不都是 bash ,还有可能是 dash 。。。
    fityme
        10
    fityme  
       2015-11-16 17:52:30 +08:00
    只在 shell 里用,没坑。唯一可能会坑的是,某些偏门的脚本和命令。你需要同时看懂 bash 和 fish 然后做修改和迁移
    dogsteve
        11
    dogsteve  
       2015-11-16 18:21:33 +08:00
    fish 的报错信息(error)和 bash 的不一样,有时候可能导致解决某个问题的时候 google 无力,浪费大量时间。
    littleqz
        12
    littleqz  
       2015-11-16 23:54:00 +08:00
    因为语法与 bash 的差异,有时候会出现奇怪的错误,比如如果服务器上用户的默认 shell 是 fish 时, ssh-copy-id 会报错,需要 chsh -s /bin/bash 才行。不过我用 fish 也有一年多了,除了前面这个毛病以外,其他倒是感觉挺好的(其实主要是补全啦, zsh 那个补全插件我也试过,感觉还是 fish 的补全比较得劲,可能是习惯了吧 :)

    建议 LZ 直接用就是了,觉得坑多不习惯换回去就是了, zsh 也蛮好的嘛。
    littleqz
        13
    littleqz  
       2015-11-17 00:00:09 +08:00
    另外提醒一下: 如果用 fish 的话不要在配置文件中使用太多的 alias ,速度很慢!见 [这里]( http://sudotry.com/speed-up-fish-shell-startup.html)
    hei1000
        14
    hei1000  
       2015-11-17 00:43:29 +08:00
    1. config 里面很多语法和 bash 不一样不兼容
    2. 编译涉及到环境变量特别是 /etc/下面的环境变量会失败,而且不会告诉你是 fish 的问题
    hei1000
        15
    hei1000  
       2015-11-17 00:46:26 +08:00
    @hei1000 3. 命令行里面一般程序调用可能要加参数引号或方斜杠的问题
    DuckJK
        16
    DuckJK  
       2015-11-17 08:19:09 +08:00
    原来用 fish 无法开机,后来换了个 SHELL 好了(也可能是别的原因)。
    skl
        17
    skl  
       2015-11-17 13:22:24 +08:00
    使用 oh-my-fish 吧,解决一大堆兼容问题
    xcodebuild
        18
    xcodebuild  
       2015-11-17 18:21:47 +08:00
    记得把 vim 和 emacs 里的 shell 都设置成 bash ,不然会有各种奇奇怪怪的兼容问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1415 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:23 · PVG 01:23 · LAX 10:23 · JFK 13:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.