DTerm (macOS 一键快捷终端) > ZSH 中的 $PATH 问题

DTerm (macOS 一键快捷终端) > ZSH 中的 $PATH 问题

我一直在使用终端长期以来,它一直是在 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

我还没有自定义启动文件等,而这个似乎是应用程序的问题

有谁知道解决方法或解决办法吗?

zsh 中的 DTerm $PATH

答案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

资料来源:

相关内容