如何使用特殊设置启动交互式 shell

如何使用特殊设置启动交互式 shell

我想要启动一个具有项目特定设置的交互式 zsh(在 cygwin 上):

  1. 来源/etc/profile
  2. 来源~/.profile
  3. 来源$PROJECT_HOME/Setup.zsh
  4. 变得互动

我已经进行到第 3 步,但是 shell 就终止了。

我以前做过这种事,但我忘了怎么做了。我试着用谷歌搜索,但什么也没找到。可能是搜索词错误。

$PROJECT_HOME/Setup.zsh当然,添加~/.profile并不是解决方案,因为我们的想法是在 Windows 桌面上有多个启动图标来启动众多项目之一的 shell。

答案1

让你的快捷方式看起来像:

env PROJECT_HOME=~/projects/this zsh

env PROJECT_HOME=~/projects/that zsh

现在采购$PROJECT_HOME/Setup.zsh工作可以顺利进行。

答案2

zsh 对此的支持不太好。我所知道的唯一方法是暂时覆盖$ZDOTDIR到某个临时目录,然后将一个.zshrc可以加载所需函数的目录粘贴到其中。以下是完整示例:

#!/usr/bin/zsh

dir=`mktemp -d /tmp/adevXXX`

# Preload the shell with all of the shell functions defined in
# build/envsetup.sh.
cat >$dir/.zshrc <<EOF
source $HOME/.zshrc
source build/envsetup.sh
EOF
ZDOTDIR=$dir zsh

rm -r $dir

答案3

你没有说你如何定义你所说的 多个启动图标,以及如何使用 shell 启动终端。例如,在我的平台上,我使用的是minnty,你可以将某个桌面图标的启动命令输入到属性中,例如

C:\cygwin64\bin\mintty.exe -s 101,26 -e /usr/bin/dash -c "PROJECT=25 /usr/bin/zsh -i -l"

$PROJECT在您的 .zshrc 中,您可以决定要加载哪个项目特定设置的值。

在这种方法中,我使用一个临时 shell(在我的情况下是 dash,因为它加载速度很快)来设置环境变量并最后调用 zsh 作为交互式登录 shell。

相同的方法也适用于其他终端仿真器,例如 ConEmu。

相关内容