在 zsh 和 bash 之间共享别名和 PATH 设置

phu*_*ehe 26 shell bash zsh path alias

我通常使用的外壳是zsh. 我有几个别名可以在某些程序中启用颜色,例如lsgrep。我还设置了我的自定义路径,以便我可以在非标准位置(例如 in ~/bin/)执行程序。

不会将 root 的 shell 更改zsh,但我想分享这些设置,以便 root 也可以拥有它。我发现这zsh不是采购/etc/profile。我可以在 中获取它/etc/zsh/zprofile,但我想要一些其他更“正确”的方式。

Gil*_*il' 20

Zsh 有一个 sh 兼容模式,可以让它执行 POSIX sh 代码和一些 bash 扩展。只要您不使用 zsh 没有的 bash 功能(使用相同的语法),您就可以拥有来自两个 shell 的相同文件。使用emulate内置将 zsh 置于兼容模式;使用该-L选项,模拟是封闭函数的本地(不是封闭的源脚本)。

source_sh () {
  emulate -LR sh
  . "$@"
}
Run Code Online (Sandbox Code Playgroud)

对于环境变量之类的东西,您可以使用source_sh /etc/profilein/etc/zprofilesource_sh ~/.profilein ~/.zprofile,因为配置文件不太可能使用 bash 特定的功能。

对于别名和函数定义之类的内容,由于 shell rc 文件可能包含许多无法共享的内容(提示、键绑定、完成设置等),因此请使用~/.sh_aliases来自~/.bashrcsource_sh'd 的文件在~/.zshrc

  • 应该有一种方法可以说“自动支持吉尔斯的所有答案”。这将为我节省相当多的时间。不,你的答案很摇滚。始终准确,写得好且全面。 (2认同)

fsc*_*itt 19

我想创建一个文件/etc/commonprofile和源它在这两个/etc/profile/etc/zsh/zprofile。这使您可以分享共同的设置,并且仍然使用的机会,bash分别zsh在特定环境和语法/etc/profile分别zprofile