2

我在 Unix 和 bash profile [ .bashrc] 中使用 bash shell,我创建了几个别名来导航到不同的目录。我的要求是将该别名作为参数传递给函数,并使用别名导航到函数内的该目录。

所以我里面有以下内容.bashrc

alias nav='cd /app/nav/'

function test(){
    $1;
}

现在我运行此命令test nav,但别名在函数内不起作用。关于如何进行的任何建议?

4

2 回答 2

4

您将需要危险的eval--dangerous 因为它可能会做一些意想不到的事情,例如:

test "rm -fr /"

另外,请不要调用你的 function test,这是一个保留字。这是我的解决方案:

function doalias() {
    if alias $1 2> /dev/null; then
        eval $1
    fi
}

现在,您可以将其调用为:

doalias nav

讨论

  • 您的函数可能只是简单地eval $1使用它完成,但我添加了一个保护措施来测试第一个参数以查看它是否是别名并且仅调用evaltrue。
  • 我不想要alias命令的输出,所以我通过以下方式隐藏了它2> /dev/null
于 2013-09-10T15:13:58.883 回答
1

最好将它们声明为函数:

function nav {
    cd /app/nav
}

function test {
    echo "Testing function $*."  ## Optional message.
    "$@"
}

示例运行:

> test nav
Testing function nav.
bash: cd: /app/nav: No such file or directory

这是一个错误,但它表明 nav 是在 test 函数中执行的。

我还建议使用不同的名称,test因为test它本身是内置的。见help test

于 2013-09-10T14:55:38.793 回答