【问题标题】:Create Alias for Function in .profile为 .profile 中的函数创建别名
【发布时间】:2016-10-27 05:27:54
【问题描述】:

我想在我的 $GOPATH/bin 目录中运行可执行文件,而不必在那里 cd,因此我将以下内容添加到我的 .profile 文件中:

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

别名定义在第 28 行。 这个想法是在命令行上输入 rungo executable_name 来运行可执行文件。

当我登录我的帐户时,我收到以下错误:

     line 31: syntax error: unexpected end of file

如果我注释掉别名定义,我会收到此错误

    line 29: syntax error: unexpected end of file

显然我的函数定义不正确。

我做错了什么?

【问题讨论】:

  • 为什么要定义一个别名而不是仅仅命名函数rungo来启动?
  • 如果只是命名函数就足够了。好久没搞Linux了,不知道最好的解决方案是什么。
  • alias... 之前使用shopt -sq expand_aliases(当shell 非交互时,别名不会展开,除非expand_aliases shell 选项使用shopt, man 1 bash 设置)。

标签: linux bash shell .profile


【解决方案1】:

如果您将 bash 函数声明为 one liner,则需要在结束函数之前包含 ;,因此工作函数应该是

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

编辑:

回答以下问题:

感谢卡罗利和祖祖克。我决定将该功能保留为单行,因此我添加了 ;当我发出“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'

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

希望这会有所帮助!

【讨论】:

  • 感谢卡罗利和祖祖克。我决定将该功能保留为单行,所以我添加了; 当我发出类似“rungo hello”的命令时,我收到一条消息,上面写着 /home/smurphy/go-workspace/bin 是一个目录可以做我想做的事吗?
  • 我将改为编辑我的答案,因为它支持更好的格式。
  • 谢谢,祖祖克。完美运行。
【解决方案2】:

函数右括号必须在新行中。或者,使用;

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 2020-04-11
    • 1970-01-01
    • 2019-12-05
    相关资源
    最近更新 更多