根据项目的不同,我为我的heroku远程仓库取了不同的名称。我希望为每个项目设置一个别名,以便推送到heroku。是否有办法为每个文件夹定义一个别名,这样在我的项目文件夹内,我可以定义指向正确的heroku远程仓库的别名?
# paths to projects
# - must be absolute
# - must not contain symlinks
# - must not end with "/"
# run `pwd -P` in the project root to get the correct value
PROJ_A="/path/to/project/a"
PROJ_B="/path/to/project/b"
pushit () {
case $(pwd -P) in
( $PROJ_A | $PROJ_A/* )
# Put command(s) needed to push A here
;;
( $PROJ_B | $PROJ_B/* )
# Put command(s) needed to push B here
;;
( * )
echo "You are not in a project directory"
;;
esac
}
原因:
虽然可以利用chpwd
钩子在每次更改当前工作目录时修改别名,但实际上只有在推送到heroku时才需要知道使用哪个命令。因此大部分时间别名会被无意修改。
使用函数可以在实际需要时做出适当的决策。并且,当直接使用函数时,所有在函数中使用的逻辑都将需要使用chpwd
路线,因此实际上减少了所需的代码行数。
dotenv
插件 :plugins+=(dotenv)
ZSH_DOTENV_FILE=.any-name-you-like-for-the-per-directory-alias-file
同时考虑使用direnv,它允许你在每个目录的.envrc
中导出环境变量,并在移开时将其取消设置(dotenv
无法实现此功能)。direnv与所有流行的Shell兼容。然而,它目前不支持定义别名或函数。
你仍然可以结合Adaephon的方法和direnv,通过创建一个基于环境变量(其中又由direnv设置)决定要执行何种操作的函数(而非别名)来实现。
这两种方法都通过手动将点文件源代码列入白名单的方式来处理安全性方面的问题。
虽然我已经晚了两年,但对于任何正在寻找类似解决方案的人,我最近刚刚完成了一个脚本,应该能够让您做到您想做的事情。请查看:localalias。
它允许您创建和使用伪别名和函数,这些别名和函数仅限于定义它们的目录。也许最好的部分是,它在不执行任何棘手的“source”命令的情况下实现了这一点。这些解决方案更简单、更快,但是存在很大的安全隐患。
以下是演示: