当我打开终端时,shell脚本函数总是显示globurl = noglob urlglobber

时间:2017-03-15 09:09:58

标签: function shell unix oh-my-zsh

可能已经回答,但我已经在互联网上查了一段时间,我无法弄明白为什么会这样。

我在shell中有这个功能

<div *ngFor="let guest of guests; let i = index">

现在我正在测试。我想在终端上创建自己的谷歌搜索。代码正在运行,但每次打开终端时,总是会出现此消息:

alias google= function google(){
        if [[ -n "$@" ]] 
        then
                echo "you typed $1"

        fi
}

为什么一直向我展示这个?我错过了一步吗?我不习惯使用shell代码进行大量工作,所以可能是非常愚蠢的事情

BTW,我正在与ZSH合作

1 个答案:

答案 0 :(得分:1)

错误原因

您收到此消息的原因是,您实际上正在使用您的函数覆盖内置aliaszsh只需在()之前提供多个名称,即可创建具有多个名称的函数。例如:

foo bar baz () {
    echo $0 $@
}

这定义了三个(相同的)名为foobarbaz的函数。当您运行代码段时:

alias google= function google(){
  # [...]
}

您还定义了三个功能:aliasgoogle=googlefunction未被覆盖,因为它是一个zsh保留字,但它既不是一个命令,也不是第一个命令。

因此,配置中的以下(或非常相似)行实际上并未通过运行 builtin alias来定义别名:

alias globurl="noglob urlglobber"

相反,功能 aliasgloburl="noglob urlglobber"作为第一个参数运行。

解决方案

创建函数时不需要别名。试试这个:

function google () {
    if [[ -n "$@" ]] 
    then
        echo "you typed $1"
    fi
}