我的 Shell 迁移记录

目录
从bash到zsh
虽然我使用zsh shell两周后就换到fish shell了(关于fish shell下面有专门介绍), 但这并不否认zsh shell仍然是个很好的shell。 你可以通过下面的方式从任意的shell切换至zsh shell。
安装zsh时通过下面的指令:
brew install zsh (MacOS)
apt install zsh (Ubuntu / Linux Mint)
如果你想要知道现在系统裡已经安装好的shell,输入下面的指令:
cat /etc/shells
如何将zsh作为你默认的shell呢?,输入下面的指令:
chsh -s /usr/local/bin/zsh
关于配置文件的读取错误
Shell 脚本解释出错时可以查看一下当前所使用的 sh
路径,
比如有可能是 sh
指向了 dash
导致出错。 通过下面的语句查看。
ls -l `which sh`
脚本解释器在语法上的不同点
从传统的 bash 等 shell 换到 zsh 时会发现集合的第一个元素的索引是从 1
开始的,
如果希望从 0
开始,在配置文件中配置下面语句即可。
Fix array index for zsh:
if [ "$ZSH_NAME" = "zsh" ];then
setopt localoptions ksharrays
fi
配置 zsh shell
与 bash 的 .bashrc
类似, zsh
的配置也需要一个配置文件,
这个文件是在用户目录下的 .zshrc
文件,
如果你不想自己写配置,点击这里打开我上传到 Github 的配置文件下载使用。
从zsh到fish
使用zsh shell之后大概两週我就换到fish shell了, 这不是因为zsh不好,而是fish天然的完成度和易用性吸引了我, 转移到fish环境后,有关shell折腾算是告一段落,以下对该过程纪录。
fish shell的安装以及默认shell的切换
这个上面提到过,这里具体针对不同的操作系统所需要执行的指令进行介绍。
MacOS:
brew install fish
Ubuntu/Linux Mint:
apt install fish
OpenSUSE:
sudo zypper install fish
如果是运行在 Windows 下的 OpenSUSE 环境,
则可能需要 root
权限,这时在命令前面加上 sudo
。
通过下面的语句查看当前系统所使用的 Shell。
cat /etc/shells
如果显示你的fish shell在 /usr/bin/fish
,
那么执行下面的语句切换其为默认shell(权限不足则补充 sudo
):
chsh -s /usr/bin/fish
现在重新打开一个终端会话会发现默认 Shell 已经切换到 Fish shell 了。
如果打开 Fish shell 后马上报很多关于 hostname 的错误,
说明当前环境缺少一个叫做 hostname 的包,
那么使用当前 Linux 发行版的包管理器安装 hostname
,
例如在 OpenSUSE 下使用:
sudo zypper install hostname
Fish shell 的配置
我写好的配置上传在了Github,点击这里查看我的配置。
在fish shell下使用python时的常见问题
目前我遇到的比较需要注意的问题有下面两点:
关于 tmux
tmux在后台存在session的时候, 即使更新=PYTHONPATH=环境变量也不会生效, 此时需要关闭tmux的所有进程,更新才会生效。 除fish以外其他shell环境应该也会遇到, 我是在fish首次出现,留作纪录。
关于
PYTHONPATH
Fish shell 中定义环境变量的方式为 set <variable_name> <parameter_1> <parameter_2>
这种方式有很大的优越性而且非常方便, 然而对于 PYTHONPATH
,
则 set PYTHONPATH <parameter_1>:<parameter_2>
的方式更具有通用性。
原因为,经过测试在 MacOS 下两种方式均可正常使用,
但在运行在 Jetson Nano 上的 Ubuntu 下测试时,只有第二种方式可用。
具体原因尚未明确,有可能时操作系统不同的原因,
也可能是 Python 版本不同造成的
(比如版本号相同,但处理器架构不同造成了编译方式的差异导致该问题)。