我一直在使用终端长期以来,它一直是在 macOS 中获取“路径感知”终端提示的一种快速便捷的方法 - 但自从升级到 BigSur/ZSH 后,$PATH
DTerm 和 Terminal.app/iTerm 就有很大不同。
我认为这是由于“迁移”问题造成的,但我正在从头开始在新笔记本电脑上重新安装,路径也不同:
终端中的路径是:
~ % echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
DTerm 中的路径是/usr/bin:/bin:/usr/sbin:/sbin
我还没有自定义启动文件等,而这个似乎是应用程序的问题。
有谁知道解决方法或解决办法吗?
答案1
解决了- 在此发帖以帮助遇到此问题的其他人
DTerm 使用的 shell 是交互的但不是登录shell(请参阅底部如何检查您拥有的 shell 类型)
这意味着 DTerm才不是在启动时执行/etc/zprofile
,这就是 macOS 中路径“更新”的地方:
# Setup user specific overrides for this in ~/.zprofile. See zshbuiltins(1)
# and zshoptions(1) for more details.
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
将此机制复制到 .zshrc 可修复此问题。为了避免弄乱$PATH
,我使用了以下形式:
if ([ $TERM_PROGRAM = DTerm ]); then
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
fi
检查外壳类型:
我发现检查 shell 是否登录的最简单的方式(因为它读取键盘所以是交互式的)是使用echo $0
:
终端 | 终端 |
---|---|
~ % echo $0 -zsh |
~ % echo $0 /bin/zsh |
登录 shell 的名称前面有一个 -dash。要获取 shell 的所有选项,可以使用echo $-
- 登录 shelll
和交互式 shelli
终端 | 终端 |
---|---|
~ % echo $- 569XZilms |
~ % echo $0 569XZi |
或者更“明确”的方法是使用:
[[ -o interactive ]] && echo "Interactive" || echo "Non-Interactive"
和
[[ -o login ]] && echo "Login" || echo "Non-Login"
它将输出 shell 是 Interactive shell 还是 Login shell
资料来源: