在不复制环境变量的情况下切换到另一个 shell

Ame*_*ina 2 zsh exec

从 tcsh,如果我尝试:

exec /home/path/to/my/zsh
Run Code Online (Sandbox Code Playgroud)

它有效(我输入了 Zsh shell)

但如果我尝试

exec -c /home/path/to/my/zsh
Run Code Online (Sandbox Code Playgroud)

我得到:

-c Command not found
Run Code Online (Sandbox Code Playgroud)

如何切换到我的 Zsh shell 并从“空白石板”启动它?(即没有从 结转的环境变量tcsh)。

Sté*_*las 6

不知道你为什么要这样做,但你可以这样做:

exec env -i /home/path/to/my/zsh
Run Code Online (Sandbox Code Playgroud)

可能很多事情都无法正常工作,因为您将丢失一些基本的环境变量,例如$PATH,$HOME$TERM

如果您想将一些变量列入白名单并删除其余变量:

exec env -i HOME="$HOME" TERM="$TERM" /home/path/to/my/zsh
Run Code Online (Sandbox Code Playgroud)

如果要恢复tcsh启动时的环境,可以将其插入到 的开头~/.tcshrc

sh -c 'export -p' > ~/.initial-env
Run Code Online (Sandbox Code Playgroud)

然后执行以下操作:

exec env -i sh -c ". $HOME/.initial-env; exec /path/to/zsh"
Run Code Online (Sandbox Code Playgroud)

tcsh启动时保存环境,执行 zsh 时恢复环境。

如果您想要的是将您的外壳更改为zsh您不必执行chsh(或未zsh安装或安装的已使用 20 年),(带回 15 多年前的内存(天哪!)当我处于完全相同的情况(尽管使用csh而不是tcsh)),您可以将您的内容替换为~/.login

setenv SHELL /path/to/zsh
exec $SHELL -l
Run Code Online (Sandbox Code Playgroud)

并删除您的 .tcshrc

设置$SHELL指定您的 shell首选项(即应用程序喜欢xtermvi...将在需要为您启动 shell 时启动)。

把它放在你的~/.login应该确保它只完成一次。希望tcsh自从您更改$SHELL. 将环境变量定义放在~/.loginor~/.zprofile或 中应该无关紧要~/.profile。由你决定。

tcsh -l退出前测试。

  • @user815423426 您不需要,实际上也不应该删除环境变量。只需执行`exec /home/path/to/my/zsh` 或者`exec /home/path/to/my/zsh -l` 来让zsh 加载`~/.zprofile`。如果有一些您不想要的环境变量,请在您的 `.zprofile` 中取消设置。 (2认同)