如何将命令行参数传递给shell别名?

时间:2009-06-02 19:06:09

标签: shell alias

如何将命令行参数传递给别名?这是一个示例:

alias mkcd='mkdir $1; cd $1;'

但在这种情况下,$ xx将在别名创建时转换,而不是在运行时转换。但是,我创建了一个使用shell函数的解决方法(在googling之后),如下所示:

function mkcd(){
  mkdir $1
  cd $1
}

只是想知道是否有办法制作接受CL参数的别名 顺便说一句 - 我使用'bash'作为我的默认shell。

12 个答案:

答案 0 :(得分:245)

重申已经为其他shell发布的内容,在 Bash 中有以下作品:

alias blah='function _blah(){ echo "First: $1"; echo "Second: $2"; };_blah'

运行以下内容:

blah one two

给出以下输出:

First: one
Second: two

答案 1 :(得分:154)

你找到了方法:创建一个函数而不是别名。 C shell有一个用于对别名进行参数的机制,但bash和Korn shell没有,因为函数机制更灵活,并提供相同的功能。

答案 2 :(得分:52)

你不能在ksh,但你可以在csh。

alias mkcd 'mkdir \!^; cd \!^1'

在ksh中,功能是可行的方法。但如果你真的想要使用别名:

alias mkcd='_(){ mkdir $1; cd $1; }; _'

答案 3 :(得分:15)

引用bash手册页:

  

在替换文本中没有使用参数的机制。如果   需要参数,应该使用shell函数(参见FUNCTIONS   下文)。

所以看起来你已经回答了自己的问题 - 使用函数而不是别名

答案 4 :(得分:11)

您可能还会发现此命令很有用:

mkdir dirname && cd $_

其中dirname是您要创建的目录的名称

答案 5 :(得分:3)

最简单的方法是使用函数而不是别名。你仍然可以随时从cli调用一个函数。在bash中,您只需添加函数名称(){command},它就像别名一样加载。

{{1}}

不确定其他炮弹

答案 6 :(得分:2)

实际上你无法用Bash别名做你想做的事,因为别名是静态的。而是使用您创建的功能。

点击此处了解更多信息:http://www.mactips.org/archives/2008/01/01/increase-productivity-with-bash-aliases-and-functions/。 (是的,我知道它是mactips.org,但它是关于Bash的,所以不要担心。)

答案 7 :(得分:2)

我发现函数不能写在〜/ .cshrc文件中..这里带有参数的别名

例如,传递给'find'命令的参数

alias fl "find . -name '\!:1'"     
Ex: >fl abc

其中abc是传递的参数!:1

答案 8 :(得分:1)

这适用于ksh:

$ alias -x mkcd="mkdir \$dirname; cd \$dirname;"
$ alias mkcd
mkcd='mkdir $dirname; cd $dirname;'
$ dirname=aaa 
$ pwd
/tmp   
$ mkcd
$ pwd
/tmp/aaa

“-x”选项使别名“已导出” - 别名在子shell中可见。

请注意,脚本中定义的别名在该脚本中不可见(因为在加载脚本时会扩展别名,而不是在解释行时扩展别名)。这可以通过在同一个shell中执行另一个脚本文件来解决(使用点)。

答案 9 :(得分:0)

如果您使用bash,我认为您可以使用shell函数执行此操作: http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/

答案 10 :(得分:0)

  

这是一个使用python的简单示例函数。你可以坚持〜/ .bashrc
   你必须在第一个左大括号后有一个空格    python命令需要用双引号来获取变量替换    不要忘记最后的分号

function count(){python -c“for num in xrange($ 1):print num”;}

$ count 6
0
1
2
3
4
5
$

答案 11 :(得分:-3)

空别名将执行其args:

alias DEBUG=