macOS 将继续使用 zsh,我们可以将 zsh 设置为 Catalina 中的默认 shell,我已经这样做了。对于 Catalina,如果我删除 bash 和 oh-my-zsh 的所有痕迹,因为 zsh 现在是默认 shell,可以吗?另外,我正在使用超级终端,这意味着我不再需要 oh-my-zsh 了。
例子:
Anaconda 安装程序最初将此脚本添加到我的 bashrc 或 bash_profile 中,因此当我切换到 zsh 时,我将其复制到 .zshrc。我最近读到我不需要/不应该复制它,因为它是为 bash_profile 设计的,但现在 macOS 无论如何都要使用 zsh,我想知道我应该怎么做。显然我需要告诉 zsh Anaconda 在哪里,但我是否需要该脚本,或者我是否可以像这样导出 Anaconda 路径export PATH=/Users/ty604/anaconda3/bin:$PATH
?
我可以将这个 Anaconda 脚本保留在 zshrc 中并删除所有 bash 痕迹,以便在 bash 消失后我的 Mac 不会过时吗?
export PATH=/Users/ty604/anaconda3/bin:$PATH
# added by Anaconda3 2019.03 installer
# >>> conda init >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$(CONDA_REPORT_ERRORS=false '/Users/ty604/anaconda3/bin/conda' shell.bash hook 2> /dev/null)"
if [ $? -eq 0 ]; then
\eval "$__conda_setup"
else
if [ -f "/Users/ty604/anaconda3/etc/profile.d/conda.sh" ]; then
. "/Users/ty604/anaconda3/etc/profile.d/conda.sh"
CONDA_CHANGEPS1=false conda activate base
else
\export PATH="/Users/ty604/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda init <<<
由于各种 shell 文件中存在重复的导出命令,我在 $PATH 中也有许多重复的路径。
$回显$PATH
/Users/ty604/anaconda3/bin:/Users/ty604/anaconda3/condabin:/Users/ty604/anaconda3/bin:/Users/ty604/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/usr/local/share/dotnet:/Users/ty604/flutter/bin
我的系统中的文件
.bash_history, .bash_profile, .bashrc, .profile, .zprofile, .zsh_history, .zshrc, .zshrc.pre-oh-my-zsh
我的系统中的文件夹
.bash_sessions, .oh-my-zsh, .zsh
答案1
您显示的 shell 初始化代码看起来并不bash
特定,并且应该也可以使用zsh
,假设它来源的各种脚本也可以工作(shell.bash
和conda.sh
)。如果有一个shell.zsh
脚本,您显然可以选择使用它而不是shell.bash
.
在zsh
shell 中,PATH
变量与数组相关联path
。您可以使用 使两者仅包含唯一条目typeset -U
。
这是使用您的特定值 for 的示例PATH
:
$ print -rC1 -- $path
/Users/ty604/anaconda3/bin
/Users/ty604/anaconda3/condabin
/Users/ty604/anaconda3/bin
/Users/ty604/.cargo/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Applications/VMware Fusion.app/Contents/Public
/usr/local/share/dotnet
/Users/ty604/flutter/bin
该路径/Users/ty604/anaconda3/bin
在开始时是重复的。要使路径唯一(现在和将来):
$ typeset -U PATH path
$ print -rC1 $path
/Users/ty604/anaconda3/bin
/Users/ty604/anaconda3/condabin
/Users/ty604/.cargo/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Applications/VMware Fusion.app/Contents/Public
/usr/local/share/dotnet
/Users/ty604/flutter/bin
另请参阅如果我推/bin
到路径的开头会发生什么:
$ path=( /bin $path )
$ print -rC1 -- $path
/bin
/Users/ty604/anaconda3/bin
/Users/ty604/anaconda3/condabin
/Users/ty604/.cargo/bin
/usr/local/bin
/usr/bin
/usr/sbin
/sbin
/Applications/VMware Fusion.app/Contents/Public
/usr/local/share/dotnet
/Users/ty604/flutter/bin
(第二个/bin
已删除。)
由于path
数组与变量相关联PATH
,因此更改也将在那里可见:
$ print -rC1 -- $PATH
/bin:/Users/ty604/anaconda3/bin:/Users/ty604/anaconda3/condabin:/Users/ty604/.cargo/bin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/usr/local/share/dotnet:/Users/ty604/flutter/bin
答案2
我后来发现 zsh 确实有一个钩这意味着我可以删除 bash shell 的所有实例,因为系统 $PATHetc/profile
无论如何都是源自的。
macOS 默认 shell 现在是 zsh,所以对我来说,bash 文件没有用处。