切换到另一个shell而不复制环境变量

切换到另一个shell而不复制环境变量

从 tcsh,如果我尝试:

exec /home/path/to/my/zsh

它有效(我输入 Zsh shell)

但如果我尝试

exec -c /home/path/to/my/zsh

我得到:

-c Command not found

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

答案1

不确定你为什么要这样做,但你可以这样做:

exec env -i /home/path/to/my/zsh

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

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

exec env -i HOME="$HOME" TERM="$TERM" /home/path/to/my/zsh

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

sh -c 'export -p' > ~/.initial-env

然后做类似的事情:

exec env -i sh -c ". $HOME/.initial-env; exec /path/to/zsh"

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

如果你想要的是改变你的外壳,zsh而你不必做chsh(或者zsh没有安装或者安装的已经有20年了),(带回超过15年前的记忆(天哪!)当我处于完全相同的情况(尽管用csh而不是tcsh)),您可以将您的内容替换~/.login为:

setenv SHELL /path/to/zsh
exec $SHELL -l

并删除你的.tcshrc

设置$SHELL指定您的 shell偏爱(这就是像xtermvi... 这样的应用程序需要为您启动 shell 时将启动的应用程序)。

将其放入您的~/.loginshould 确保只完成一次。希望tcsh自从您进行更改后,稍后在您的登录会话期间不会启动更多操作$SHELL。无论您是否将环境变量定义放在~/.loginor~/.zprofile或中都没有关系~/.profile。由你决定。

tcsh -l注销前进行测试。

相关内容