如何在没有 exec 的情况下在同一个会话中运行脚本?

如何在没有 exec 的情况下在同一个会话中运行脚本?

我有下面的脚本来设置我的项目:-

#! /bin/zsh

source ~/.zshrc
crld #alias for Project base
cd Kenneth_Love/survivalguide
workon kenneth_tutorial

该脚本有效,但不会将我带入虚拟环境(别名已正确设置)

Virtualenv 顾名思义就是创建虚拟环境,用于保持环境可单独管理,这样就不会互相干扰,例如,在某个地方您想要 x 版本的包,而对于其他项目您想要 Y 版本,因此它使这一切变得容易。运行上述脚本命令是重复的任务,但此脚本在不同的会话下运行然后退出。我希望它在调用此脚本的同一 shell 环境中运行。

答案1

某些 shell 命令(例如cd)会影响当前 shell 及其子/后代进程,但不能影响父 shell。当您将脚本作为普通命令(例如scriptname.sh 或)运行时,它会在单独的 shell 进程中运行。当该 shell 进程终止时,这些命令的影响就会消失。这就是为什么像您这样的脚本通常以、、或其他任何形式结尾的原因——它会导致./scriptname.shexec shexec bashexec zsh过程它将以交互式 shell 的形式存在于新的环境中。

如果你不想这样做,唯一的其他方法就是运行脚本你的主要交互式 shell。在 bash 中,你可以使用

来源脚本名称.sh

或者

 脚本名称.sh

(如果脚本位于当前目录中,则可能需要使用 。)我确信具有相同的功能。语法可能不同;请查看您的 shell 的文档。./scriptname.shzsh

如果您难以记住执行此操作(或者如果操作变得麻烦),请考虑为其定义一个别名。

相关内容