一个bash函数作为可执行文件目录的别名?

时间:2017-01-31 20:30:01

标签: bash zsh

我发现很难找到合适的头衔。这就是我想要的:

$ some_prefix deploy

应该在deploy中运行名为/some/directory/somewhere的可执行文件,我可以将“deploy”替换为该目录中的任何其他可执行文件。我可以将/some/directory/somewhere添加到我的PATH中,但是有些脚本具有通用名称,所以我想用前缀来调用它们。

3 个答案:

答案 0 :(得分:2)

我认为你只想要一个硬编码路径的功能:

run_it () {
    "/some/directory/somewhere/$1" "${@:2}"
}

然后致电

run_it deploy foo bar baz

运行

/some/directory/somewhere/deploy foo bar baz

答案 1 :(得分:1)

创建一个名为setmy的函数或别名,它将根据/some/directory/somewhere中的可执行文件列表设置许多别名函数。
您的setmy将对所有可执行文件执行alias mydeploy=/some/directory/somewhere/deploy 接下来使用前缀my调用您的函数,只跳过空格:

mydeploy

答案 2 :(得分:0)

您可以通过将其定义添加到命令中来临时重新定义PATH的值:

PATH=/some/directory/somewhere:/usr/local/bin:/usr/bin:/bin deploy

这也可以打包成别名:

alias some_prefix='PATH=/some/directory/somewhere:$PATH'

这样你只需要运行:

some_prefix deploy

shell(bashzsh甚至dash)将首先扩展别名

PATH=/some/directory/somewhere:$PATH deploy

然后是PATH参数

PATH=/some/directory/somewhere:/usr/local/bin:/usr/bin:/bin deploy

在使用重新定义的PATH搜索deploy命令并将其传递到deploy进程的环境之前。

注意:该定义仅限于以下命令,到整个命令行。所以,如果你运行

some_prefix deploy ; deploy

仅在修改后的deploy中搜索第一个PATH,而第二个使用原始值PATH。对于与|&&||链接的命令也是如此。如果这是一个问题,您可能需要查看this question。当然,总是可以根据需要多次使用别名:

some_prefix deploy; some_prefix deploy