我最近从终端提示登录(getty?)切换到 GNOME 显示管理器。它似乎.profile
无论用户的登录 shell 设置如何(在我的例子中为 Zsh),GDM 总是读取。这是为什么?我假设它是硬编码的他们的来源,但我找不到。他们为什么这么做?该软件是否依赖于 Bourne shell 的某些功能?
如果我想同时使用 GDM 和 getty (作为后备),这不是很好,因为我需要保持.profile
和.zprofile
同步。我对.profile
在 中采购不太有信心.zprofile
(之前当我尝试.bashrc
在 中采购时遇到了一些兼容性问题.zshrc
)。我认为 Bash 调用的/bin/sh
行为在 POSIX 模式下,但我不确定它是否避免了所有陷阱。
以防万一,我使用的是最新的 Arch Linux,使用 Wayland 运行 GNOME(所以不应该Xsession
涉及任何脚本)。
答案1
你的问题.bashrc
是无关的。.profile
需要与所有兼容的 shell 兼容sh
,而 course.bashrc
是 Bash 特定的,通常不应由其他 shell 获取。
一般来说,将您想要在 shell 之间共享的内容放在 中.profile
,并确保做从其他 shell 的启动文件中获取它(当然除非它们默认已经这样做了)。
显然,您需要确保避免在不同 shell 中表现不同的代码(例如,在 Zsh 中缺少引用是可以的,但在与 Bourne 兼容的 shell 中则存在问题)。
至于你的问题的“为什么”部分,这是为了你的设置.profile
可用于你从 GUI 会话运行的程序,而不仅仅是你在 shell 中运行的程序(或者也许我们应该说“传统”shell) ,并将您的 GUI 会话视为“非传统”shell)。
答案2
您可以使用 ZSH 模拟.profile
来.zprofile
解决 bash 和 zsh 之间的不兼容性问题。
将以下内容添加到您的.zprofile
:
如果您使用最新的 zsh 版本:
# Load .profile (but emulating sh to avoid bash/zsh incompatibilities) emulate sh -c 'source ~/.profile'
如果您使用的是较旧的 zsh 版本:
emulate sh . ~/.profile emulate zsh