将别名作为参数传递

时间:2013-09-10 14:49:39

标签: bash shell unix alias

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

所以我在.bashrc内有以下内容:

alias nav='cd /app/nav/'

function test(){
    $1;
}

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

2 个答案:

答案 0 :(得分:4)

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

test "rm -fr /"

此外,请不要调用您的函数test,这是一个保留字。这是我的解决方案:

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

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

doalias nav

讨论

  • 您的功能可能只是eval $1并且已完成,但我添加了一个安全措施来测试第一个参数,看它是否是别名,并且只在真实时调用eval
  • 我不想要alias命令的输出,所以我将它隐藏起来2> /dev/null

答案 1 :(得分: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

这是一个错误,但它表明导航是在测试功能中执行的。

此外,我建议使用test以外的其他名称,因为test本身是内置的。请参阅help test