我是python开发人员,最常使用buildout来管理我的项目.在这种情况下,我不需要运行任何命令来激活我的依赖项环境.
但是,有时我使用virtualenv,当buildout对于这个特殊情况来说很复杂.
最近我开始玩红宝石.并注意到非常有用的功能.当我cd进入项目文件夹时,环境会自动更改.它与rvmnad .rvmrc文件有某种关联.
我只是想知道是否有办法在不同的bash命令上挂钩一些脚本.因此我可以workon environment_name在cd进入项目文件夹时自动进行.
所以逻辑很简单:
当你cd在项目中使用时folder_name,应该运行脚本workon folder_name
rua*_*akh 12
Unix shell的一个特性是它们允许你创建shell函数,这与其他语言中的函数非常相似; 它们基本上是命名的命令组.例如,您可以编写一个名为mycdfirst run 的函数cd,然后运行其他命令:
function mycd () {
cd "$@"
if ... ; then
workon environment
fi
}
Run Code Online (Sandbox Code Playgroud)
("$@"扩展为您传递给的参数mycd;因此mycd /path/to/dir将调用cd /path/to/dir.)
作为一种特殊情况,shell函数实际上取代了类似命名的内置命令; 因此,如果您命名您的函数cd,则cd只要您运行它就会运行而不是内置函数cd.在这种情况下,为了让函数调用内置函数来cd执行实际的目录更改(而不是调用自身,导致无限递归),它可以使用Bash的builtin内置函数来调用指定的内置命令.所以:
function cd () {
builtin cd "$@" # perform the actual cd
if ... ; then
workon environment
fi
}
Run Code Online (Sandbox Code Playgroud)
(注意:我不知道你识别项目目录的逻辑是什么,所以我把它留给...你填写.如果你在评论中描述你的逻辑,我会相应地编辑.)