将parameter passing给bash中的别名

是否有可能做到以下几点:

我想要运行以下内容:

mongodb bin/mongod 

在我的bash_profile中

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

一个别名将扩展到它所表示的string。 别名之后的任何内容都将在其扩展后出现,而不需要或不能以明确的parameter passing(例如$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 

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

 type -a foo 

或仅input(最高优先级):

 type -t foo 

通常,当我想在Bash中将parameter passing给别名时,我使用了这样的别名和函数的组合,例如:

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

在别名中使用参数,我使用这种方法:

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

它的自毁function包裹在一个别名,所以它几乎是两全其美的,并没有占用额外的行(S)在你的定义…我讨厌,噢,如果你需要那个回报值,你必须在调用unset之前存储它,然后在那个自毁函数中使用“return”关键字返回值:

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

所以..

你可以,如果你需要在那里有这个variables

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

当然…

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

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

我希望能帮助你:)

这是可以避免使用function的解决scheme:

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

testing结果

 addone 200 input: 200 result:201 

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的示例);

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

 function __GetIt { cp ./path/to/stuff/$* . } alias GetIt='__GetIt'