在.profile中为函数创建别名

3

我希望能够在$GOPATH/bin目录下运行可执行文件,而无需cd到该目录。因此,我已经将以下内容添加到我的.profile文件中:

    export GOBIN=$HOME/go-workspace/bin
    function _rungo() { "$GOBIN" "@$1" }
    alias rungo='_rungo'

别名定义在第28行。

这个想法是,我在命令行中输入rungo 可执行文件名称来运行一个可执行文件。

当我登录我的账户时,我会收到以下错误信息:

     line 31: syntax error: unexpected end of file

如果我注释掉别名定义,我会得到这个错误。
    line 29: syntax error: unexpected end of file

很明显我的函数定义是不正确的。我做错了什么?

为什么要定义别名而不是直接将函数命名为“rungo”来启动? - chepner
如果仅命名函数足够的话那就可以了。我已经有一段时间没做Linux,所以不知道最好的解决方案是什么。 - Steve Murphy
alias...之前使用shopt -sq expand_aliases(除非使用shopt命令设置了expand_aliases shell选项,否则别名不会在shell非交互模式下扩展,参见man 1 bash)。 - Alexander Lubyagin
2个回答

2

如果您将bash函数声明为一行代码,您需要在结束函数之前包含一个;,因此工作函数应该是:

function _rungo() { "$GOBIN" "@$1" ;}

编辑:

回答以下问题:

感谢 Karoly 和 Zuzzuc。 我已决定将此功能保留为单行函数,因此我添加了; 当我发出类似“rungo hello”的命令时,我会收到一条消息,上面写着/home/smurphy/go-workspace/bin是一个目录。我是否可以做到我想做的事情?

首先,您不需要编写 function myFunction(),因为 myFunction() 同样有效。

接下来,对于真正的问题,您不需要创建别名 rungo,只需将函数命名为 rungo 即可。创建别名只是浪费时间,因为它会将其输入重定向到您创建的函数。

部分失败的原因是因为别名不能使用参数。 我也不确定您是否需要在“@$1”中使用“@”。

我认为最好使用 exec "$GOBIN/$1" 而不仅仅是 "$GOBIN" "@$1"

解决方案

更改

export GOBIN=$HOME/go-workspace/bin
function _rungo() { "$GOBIN" "@$1" }
alias rungo='_rungo'

to

export GOBIN=$HOME/go-workspace/bin
function rungo() { exec "$GOBIN/$1" ;}

希望这有所帮助!


感谢Karoly和Zuzzuc。我决定将函数保持为一行代码,所以我添加了;。当我发出像“rungo hello”这样的命令时,我会收到一条消息,上面写着“/home/smurphy/go-workspace/bin是一个目录”。我想做的事情可能吗? - Steve Murphy
我会编辑我的答案,因为它支持更好的格式。 - Zuzzuc
谢谢,Zuzzuc。完美运作。 - Steve Murphy

0

函数的结束括号必须在新的一行。或者,使用;

为了说明问题,看看这个例子:

function rungo() { echo X }
}
rungo    # outputs: X }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接