我使用它zsh
作为我的默认 shell 并使用它.zshrc
来修改我的环境变量。当我gvim
从终端启动时,一切都很好,但是如果我使用桌面图标启动 gvim,我的环境变量就会消失。 (只是清除它:shell
可以,但:!
命令不行)
我尝试将环境变量移至,.zprofile
但没有成功。如果我将它们移至,它就可以工作,.profile
但我再次需要复制我的变量,因为zsh
没有读取.profile
我对 shell 的内部处理不太了解gvim
。是否可以读取.zshrc
或.zprofile
用于:!
命令?
笔记:我正在使用一个ubuntu
系统。任何涉及操作系统的优雅解决方案也是受欢迎的。
答案1
用于
.zshrc
修改我的环境变量
这就是你的问题的根本原因。.zshrc
是交互式 shell 会话的启动文件。用它来设置 shell 设置,而不是设置环境变量。环境变量通常在会话文件中设置,例如.profile
.看.bashrc 的替代方案(适用的.bashrc
也适用.zshrc
)。
如果 zsh 是您的登录 shell,它不会读取~/.profile
,而是读取~/.zprofile
.请注意,即使 zsh 是交互式 shell,它也不一定是您的登录 shell:您可以将/bin/sh
其用作登录 shell 并SHELL=$(command -v zsh)
在您的环境中进行设置,以便终端模拟器等运行 zsh。既然您说定义环境变量不起作用~/.zprofile
,那么这可能就是您的系统已经设置的方式,但如果没有更准确的信息,很难判断“不起作用”。
如果您的登录 shell 是 zsh,请将以下行放入您的~/.zprofile
to read中.profile
:
emulate ksh -c '. ~/.profile'
通常,您可以使用普通的. ~/.profile
,因为 zsh 和 Bourne 风格的 shell 之间的不兼容性不太可能出现在.profile
.
答案2
如果它不是交互式或登录 shell,我认为您只能使用~/.zshenv
.以下内容来自“启动/关闭文件”部分zshall(1)
:
Commands are then read from $ZDOTDIR/.zshenv. If the shell is a login
shell, commands are read from /etc/zsh/zprofile and then $ZDOT-
DIR/.zprofile. Then, if the shell is interactive, commands are read
from /etc/zsh/zshrc and then $ZDOTDIR/.zshrc. Finally, if the shell
is a login shell, /etc/zsh/zlogin and $ZDOTDIR/.zlogin are read.