当用户的默认 shell 是 zsh 时,图形登录时不会读取 ~/.zprofile

ke.*_*ke. 5 zsh login

我使用的是 Ubuntu 14.04。我曾经chsh将默认 shell 设置为/usr/bin/zsh.

~/.zprofile定义了几个环境变量,例如export EDITOR=vim. 然而,登录并启动 GNOME 终端后,这些变量并未设置。运行后zsh -l,它们是:

% echo $EDITOR

% zsh -l
% echo $EDITOR
vim
%
Run Code Online (Sandbox Code Playgroud)

那么显然,当在zsh登录时运行时,它不知道它是登录 shell,因此不读取.zprofile?是什么赋予了?

据我所知,直到最近这才起作用,然后突然就不起作用了,所以也许升级破坏了某些东西?

mur*_*uru 7

显然,当 zsh 在登录时运行时......

您正在zshGNOME 终端中运行,而不是在登录时运行。通过切换到 TTY ( CtrlAltF1) 并登录进行比较。

它不知道这是一个登录 shell

术语“登录 shell”被重载:

  1. 这是您条目中提到的外壳passwd。基于控制台的登录方法通常会启动此 shell(尝试 TTY、或sudo -l、或su -)。具有此上下文的“登录 shell”用于讨论用户帐户。
  2. shell 可以作为登录 shell 运行,无论它是否是用户的登录 shell(1)。对于大多数类似 Bourne 的 shell,可以通过-l手动运行时使用 或间接启动时(通过、、等)-作为参数 0 的第一个字符来获得。在讨论 shell 的调用时会用到这个含义。loginsudosu

所以,它不是登录 shell(2),因为我们正在讨论它是如何启动(调用)的。


.zprofile由登录 shell 读取 (2)。默认情况下,GNOME 终端不运行登录 shell (2)。你必须告诉它这样做

  1. 转到编辑->配置文件首选项

  2. 选择标题和命令选项卡。

  3. 请注意“作为登录 shell 运行命令”复选框是如何取消选中的!核实。

  • @ke。显示管理器源“.profile”,它应该是这样的 - 它是标准的、独立于 shell 的。它不会运行您的登录 shell。DM 不知道(也不关心)“zsh”使用“.zprofile”而不是“.profile”。 (5认同)
  • 当我登录时,显示管理器不是应该运行 zsh 作为登录 shell 吗?难道我的所有进程(包括 GNOME 终端和它运行的任何 shell)都应该继承登录 shell 的环境,以便配置文件中定义的变量可用吗?bash 和 ~/.profile 似乎会发生这种情况,但 zsh 和 ~/.zprofile 不会发生这种情况。 (4认同)