2010-12-14 91 views
79

变量我想在bash创建别名是这样的:别名与在bash

alias tail_ls="ls -l $1 | tail" 

因此,如果有人类型:

tail_ls /etc/ 

它只会显示最后的10个文件目录。

但是$1似乎不适合我。有什么办法可以在bash中引入变量。

+1

csh和tcsh支持别名中的'$ 1'等参数; bash不会。 – 2014-12-31 02:13:54

回答

129

我想创建一个函数,该函数,而不是别名,然后出口,就像这样:

function tail_ls { ls -l "$1" | tail; } 

export -f tail_ls 

-f开关export:它告诉它要导出一个函数。把这个放在你的.bashrc,你很好走。

+4

通常不需要导出函数。 – 2010-12-14 10:58:31

+3

@丹尼斯,是的,你说得对,一个简单的别名不是必须的,但它是在那里,以防万一你想在一些派生的shell /进程中使用它。 – 2010-12-14 11:10:52

+13

在bash中,你需要输入一个分号';'在关闭父项'}'之前将函数折叠为一个oneline。 '函数tail_ls {ls -l“$ 1”|尾巴}'没有像尾巴一样的结尾不起作用; }'。 – 2012-02-08 10:26:42

1

tail_ls() { ls -l "$1" | tail; }

+1

请修正语法错误(在'}'之前缺少';'和双引号'$ 1'),以便支持带有内嵌空白和其他shell元字符的文件名。 – mklement0 2016-02-21 22:22:46

28

@格言 - sloyko的解决方案没有奏效,但如果以下内容:

  1. 在〜/ .bashrc中添加:

    sendpic() { scp "[email protected]" [email protected]:/www/misc/Pictures/; } 
    
  2. 保存文件并重新加载

    $ source ~/.bashrc 
    
  3. 并执行:

    $ sendpic filename.jpg 
    

原始出处:http://www.linuxhowtos.org/Tips%20and%20Tricks/command_aliases.htm

+2

@fedorqui感谢您的帮助。 – jruzafa 2014-08-22 07:55:13

+0

像魅力一样工作 – 2016-08-26 10:05:26

+0

@jruzafa,在这种情况下,您声称'maxim-sloyko作品的解决方案无效',而他/她的解决方案为我自己工作。 – 2017-10-23 10:08:02

1

如果你正在使用的不是bash的鱼贝(从http://fishshell.com),它们不同的功能写一点。

你会想这样的事情添加到您的~/.config/fish/config.fish这是你的~/.bashrc

function tail_ls 
    ls -l $1 | tail 
end 
7
alias tail_ls='_tail_ls() { ls -l "$1" | tail ;}; _tail_ls' 
+0

这是一个创造性的方法。如果他们需要**使用别名而不是函数,那么肯定可以解决这个问题......我认为我更喜欢一个函数,如果这些函数是一个选项,而是一个非常整洁的解决方案,以便在出现正确的情况时记住! – lagweezle 2016-07-21 16:00:13

1

相当于您可以set定义$1,然后用你的别名,如预期:

$ alias tail_ls='ls -l "$1" | tail' 
$ set mydir 
$ tail_ls