在bash中将参数传递给别名

时间:2010-10-30 22:03:50

标签: bash shell .bash-profile

是否可以执行以下操作:

我想运行以下内容:

mongodb bin/mongod

在我的bash_profile中我有

alias = "./path/to/mongodb/$1"

6 个答案:

答案 0 :(得分:209)

别名将扩展为它所代表的字符串。别名之后的任何内容都将在其扩展后出现,而不需要或能够作为显式参数传递(例如$1)。

$ alias foo='/path/to/bar'
$ foo some args

将扩展到

$ /path/to/bar some args

如果要使用显式参数,则需要使用函数

$ foo () { /path/to/bar "$@" fixed args; }
$ foo abc 123

将像执行

一样执行
$ /path/to/bar abc 123 fixed args

取消定义别名:

unalias foo

取消定义函数:

unset -f foo

要查看类型和定义(针对每个已定义的别名,关键字,函数,内置文件或可执行文件):

type -a foo

或仅键入(对于最高优先级):

type -t foo

答案 1 :(得分:21)

通常当我想将参数传递给Bash中的别名时,我会使用别名和这样的函数的组合,例如:

function __t2d {                                                                
         if [ "$1x" != 'x' ]; then                                              
            date -d "@$1"                                                       
         fi                                                                     
} 

alias t2d='__t2d'                                                               

答案 2 :(得分:18)

使用别名中的参数,我使用此方法:

alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'

它是一个包含在别名中的自毁函数,所以它几乎是两个世界中最好的,并且不会在你的定义中占用额外的一行......我讨厌,哦是的,如果你需要返回值,你必须在调用unset之前存储它,然后在那里的自毁函数中使用“return”关键字返回值:

alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias'

所以..

你可以,如果你需要在那里有变量

alias mongodb='function __mongodb() { ./path/to/mongodb/$1; unset -f __mongodb; }; __mongodb'

当然......

alias mongodb='./path/to/mongodb/'

实际上会做同样的事情而不需要参数,但就像我说的,如果你因为某些原因想要或需要它们(例如,你需要$ 2而不是$ 1),你需要使用这样的包装器。如果它大于一行你可能会考虑直接写一个函数,因为随着它变得越来越大,它会变得越来越像。函数很棒,因为你获得了函数给出的所有特权(参见bash手册页中函数可以提供的好东西的完成,陷阱,绑定等)。

我希望能帮到你:)

答案 3 :(得分:7)

这是可以避免使用功能的解决方案:

alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'

测试结果

addone 200
input: 200
result:201

答案 4 :(得分:3)

csh (而不是 bash )中,您可以完全按照自己的意愿行事。

alias print 'lpr \!^ -Pps5'
print memo.txt

符号\!^会导致参数在此时插入命令。

!字符前面有\,以防止它被解释为历史命令。

您还可以传递多个参数:

alias print 'lpr \!* -Pps5'
print part1.ps glossary.ps figure.ps

(取自http://unixhelp.ed.ac.uk/shell/alias_csh2.1.html的例子。)

答案 5 :(得分:-3)

为了简化leed25d的答案,请使用别名和函数的组合。例如:

function __GetIt {
    cp ./path/to/stuff/$* .
}

alias GetIt='__GetIt'