从 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偏爱(这就是像xterm
或vi
... 这样的应用程序需要为您启动 shell 时将启动的应用程序)。
将其放入您的~/.login
should 确保只完成一次。希望tcsh
自从您进行更改后,稍后在您的登录会话期间不会启动更多操作$SHELL
。无论您是否将环境变量定义放在~/.login
or~/.zprofile
或中都没有关系~/.profile
。由你决定。
tcsh -l
注销前进行测试。