我在Unix中使用bash shell并且在bash profile [.bashrc
]中使用了我创建了一些别名来导航到不同的目录。
我的要求是将别名作为参数传递给函数,并使用别名导航到函数内的该目录。
所以我在.bashrc
内有以下内容:
alias nav='cd /app/nav/'
function test(){
$1;
}
现在我运行此命令test nav
,但别名在函数内部不起作用。
关于如何实现这一目标的任何建议?
答案 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
。