切换到ZSH以后遇到的坑

了解到ZSH的强大以后打算将自己目前使用的bash切换到ZSH。具体ZSH比bash强在那里就不多少了,网上的文章一搜一大把。个人主要是被ZSH强大的自动补全吸引过来的。虽然bash装了bash-completaion以后也有了一定的自动补全能力,但是和ZSH比起来还是差距太大。

ZSH虽然功能强大,但是配置繁琐,并且shell脚本的语法一向比较奇葩,如果自己定制还需要对shell脚本有一定的了解。本来想用ZSH来节省时间,但是还要花大量时间来配置ZSH无疑会生使众多程序员望而却步。好在github有oh-my-ZSH这个项目,自动把大量的配置给你搞好了,基本上做到了开箱即用。

具体如何安装ZSH和配置oh-my-zsh就不多说了,请参见https://github.com/robbyrussell/oh-my-zsh

安装完毕后运行chsh -s /bin/zsh将当前默认的shell切换为zsh。另外需要做的是要将以前~/.bash_profile中的配置复制到~/.zshrc中,这样保证以前在bash中定义的别名、命令等可以继续正常工作。

虽然说ZSH无缝兼容bash,但是刚开始使用还是遇到了一些坑,好歹都一一解决了。

编码问题

当我运行Octopress博客的生成博客命令时,遇到了这个奇怪的错。

1
2
3
$ rake generate

YAML Exception reading 2013-12-15-responsive-menu-by-media-queries.markdown: invalid byte sequence in US-ASCII

看起来貌似是默认编码的问题,ZSH使用的默认编码是US-ASCII,但我期望的是UTF-8。

ok,查看当前zsh shell下的编码是什么。

1
2
3
4
5
6
7
8
9
$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

由于没设值,所以ZSH就选取了US-ASCII。

解决办法也很简单,在~/.zshrc中加入以下两行。

~/.zshrc
1
2
3
4
5
6
7
8
9
export LC_ALL=en_US.UTF-8  export LANG=en_US.UTF-8```然后重新加载zshrc文件并查看编码。$ source ~/.zshrc$ locale
# Compilation flagsLANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8”

通配符问题

我又发现如果命令行中有[] *等字符会被zsh优先作为通配符处理,这样导致某些命令会被ZSH错误解析。

比如:

1
$ rake new_post[‘a new post’]

这里的[]是ruby语言中的语法,但是被ZSH解析成了通配符,所以报错。解决方法也简单,关闭ZSH的这一特性。

在~/.zshrc中加入下面一行即可搞定。

1
setopt no_nomatch
<think>好的,我现在需要帮助用户在Ubuntu上将默认的Shell从Bash切换Zsh。根据用户提供的引用内容,我需要整合相关信息并确保步骤正确。首先,引用[2]提到在Ubuntu上安装并启动Zsh的命令,这应该是第一步。然后引用[3]提到了配置文件的处理,可能需要将现有的Bash配置迁移到Zsh。另外,引用[1]中有启动Zsh的命令,可能涉及如何设置默认Shell。还需要注意,使用chsh命令可能需要管理员权限,所以可能需要sudo。 首先,用户需要安装Zsh,这可以通过apt-get完。安装完后,启动Zsh测试是否正常。接下来,使用chsh命令修改默认Shell,但可能需要指定Zsh的路径,比如/usr/bin/zsh。这时候需要确认Zsh的安装位置是否正确。然后,用户可能需要将原有的Bash配置文件(如.bashrc或.profile)中的内容复制到.zshrc中,或者直接导入,以确保环境变量和别名等设置生效。引用[3]提到可以直接拷贝配置文件,或者将Bash的配置整合到.zshrc里,因为Zsh兼容Bash。 另外,用户可能想了解如何验证当前Shell是否已经切换功,可以通过echo $SHELL或者echo $0命令。还要注意,修改默认Shell可能需要重新登录或重启终端才能生效。可能还需要安装Oh My Zsh这样的框架来增强Zsh的功能,但用户的问题中没有提到,所以可能需要作为额外建议。需要确保所有步骤中的命令正确,并且没有语法错误,比如安装命令中的sudo apt-get install zsh是否正确,是否需要更新软件源等。可能还需要处理一些常见问题,比如chsh命令找不到Zsh路径,或者权限问题。最后,检查是否有遗漏的步骤,比如配置文件的处理是否需要用户手动操作,或者是否有其他依赖需要安装。</think>### 如何在Ubuntu中将Shell从Bash切换Zsh? #### 1. **安装Zsh** 首先需要确保系统已安装Zsh。在终端中执行以下命令: ```bash sudo apt-get update sudo apt-get install zsh ``` 完后可通过`zsh --version`验证安装[^2]。 #### 2. **临时启动Zsh测试** 输入命令直接启动Zsh会话: ```bash zsh ``` 此时终端会进入Zsh交互式配置向导,按提示完初始化设置或按`Ctrl+C`跳过[^1]。 #### 3. **设置为默认Shell** 使用`chsh`命令修改当前用户的默认Shell: ```bash chsh -s $(which zsh) ``` 此命令将Zsh路径(通常为`/usr/bin/zsh`)写入用户配置。**需重启终端或重新登录生效**[^2]。 #### 4. **迁移Bash配置(可选)** 将原有Bash配置(如别名、环境变量)迁移到Zsh: ```bash # 拷贝Bash配置文件到Zsh cp ~/.bashrc ~/.zshrc # 或手动将内容追加到~/.zshrc echo "source ~/.bashrc" >> ~/.zshrc ``` Zsh兼容大部分Bash语法,但需注意某些Bash特有功能(如`select`语句)可能需要调整[^3][^4]。 #### 5. **验证默认Shell** 重新打开终端后,通过以下命令验证: ```bash echo $SHELL # 应输出/usr/bin/zsh echo $0 # 当前Shell进程名应为zsh ``` #### 6. **增强Zsh功能(可选)** 推荐安装Oh My Zsh框架优化体验: ```bash sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值