定义每个文件夹的zsh别名哦

时间:2015-04-14 01:57:48

标签: linux shell unix zsh oh-my-zsh

我的heroku远程名称有不同的名称,具体取决于项目,我希望每个项目都有一个别名来推送到heroku,无论如何都要为每个文件夹定义一个别名,以便在我的项目中文件夹我可以定义指向右侧heroku远程的别名吗?

3 个答案:

答案 0 :(得分:6)

我建议使用函数而不是别名

# 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路由时无论如何都需要函数中使用的所有逻辑,所以实际上减少了直接使用函数时所需的代码行。

答案 1 :(得分:0)

我已经晚了两年多了,但是对于那些正在寻找类似解决方案的人来说,我最近刚刚完成了一个脚本,可以让你完成你想要做的事情。看看:localalias

它允许您创建和使用定义它们所在目录的伪别名和函数。也许最好的部分是它完成此操作而不执行任何冒险的“源”命令。这些解决方案更容易,更快,但是存在很大的安全问题。

这是一个演示:

enter image description here

答案 2 :(得分:0)

只需激活dotenv plugin

plugins+=(dotenv)
ZSH_DOTENV_FILE=.any-name-you-like-for-the-per-directory-alias-file

还考虑使用direnv,它可以让您在每个目录.envrc中导出环境变量,在您离开时取消设置它们(dotenv不能做)。 direnv与所有流行的shell兼容。但是,currently不允许您定义别名或函数。

您仍然可以通过创建一个函数(而不是别名)将Adaephon's approach与direnv结合使用,该函数根据一个(或多个)环境变量来决定要做什么,而这些环境变量又由direnv设置。 >

这两种方法都是通过手动将要列出点文件的目录列入白名单来处理安全方面的问题。