别名与bash中的变量

Dee*_*pta 108 linux bash

我想像这样创建一个别名bash:

alias tail_ls="ls -l $1 | tail"
Run Code Online (Sandbox Code Playgroud)

因此,如果有人输入:

tail_ls /etc/ 
Run Code Online (Sandbox Code Playgroud)

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

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

Max*_*yko 168

我为它创建了一个函数,而不是别名,然后导出它,如下所示:

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

export -f tail_ls
Run Code Online (Sandbox Code Playgroud)

注意-f切换到export:它告诉它您正在导出一个函数.把它放在你的.bashrc身上,你很高兴.

  • 在bash中你需要加一个分号';' 在关闭父级'}'之前将函数折叠到oneline中.`function tail_ls {ls -l"$ 1"| 如果没有像尾巴这样的结尾,那就不起作用了.}`. (16认同)
  • 通常没有必要导出函数. (7认同)
  • @Dennis,是的,你是对的,因为一个简单的别名是不必要的,但它就是为了以防万一你想在一些派生的shell /进程中使用它. (3认同)
  • 这不是基于别名的解决方案,而是基于功能的解决方案。 (2认同)

jru*_*afa 30

@ maxim-sloyko的解决方案不起作用,但如果如下:

  1. 在〜/ .bashrc中添加:

    sendpic () { scp "$@" mina@foo.bar.ca:/www/misc/Pictures/; }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 保存文件并重新加载

    $ source ~/.bashrc
    
    Run Code Online (Sandbox Code Playgroud)
  3. 并执行:

    $ sendpic filename.jpg
    
    Run Code Online (Sandbox Code Playgroud)

原始资料来源:http://www.linuxhowtos.org/Tips%20and%20Tricks/command_aliases.htm

  • @fedorqui感谢您的帮助. (2认同)

Jav*_*pez 15

alias tail_ls='_tail_ls() { ls -l "$1" | tail ;}; _tail_ls'
Run Code Online (Sandbox Code Playgroud)

  • 这是一种创造性的方法。如果他们**需要**使用别名而不是函数,那么绝对可以解决问题......如果这些是一个选项,我想我更喜欢一个函数,但是当正确的情况出现时要记住一个非常巧妙的解决方案! (2认同)