是否有可能做到以下几点:
我想播放以下内容:
mongodb bin/mongod
在我的 bash _ profile 中
alias = "./path/to/mongodb/$1"
通常,当我想在 Bash 中将参数传递给别名时,我会使用别名和函数的组合,例如:
function __t2d { if [ "$1x" != 'x' ]; then date -d "@$1" fi } alias t2d='__t2d'
别名将展开为它所表示的字符串。别名之后的任何内容都会出现在它的展开之后,而不需要或者能够作为显式参数传递(例如 $1)。
$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
为了简化 leed25d 的答案,可以使用别名和函数的组合。例如:
function __GetIt { cp ./path/to/stuff/$* . } alias GetIt='__GetIt'
要在别名中使用参数,我使用以下方法:
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 手册中函数可以提供的补丁的完成、陷阱、绑定等)。
我希望这能帮到你:)
在 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。)
这是一个可以避免使用函数的解决方案:
alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'
测试结果
addone 200 input: 200 result:201