【发布时间】:2011-05-25 04:49:18
【问题描述】:
我想在bash 中创建一个别名,如下所示:
alias tail_ls="ls -l $1 | tail"
因此,如果有人键入:
tail_ls /etc/
它只会显示目录中的最后 10 个文件。
但是$1 似乎对我不起作用。有什么办法可以在 bash 中引入变量。
【问题讨论】:
-
csh 和 tcsh 支持别名中的
$1等参数; bash 没有。
我想在bash 中创建一个别名,如下所示:
alias tail_ls="ls -l $1 | tail"
因此,如果有人键入:
tail_ls /etc/
它只会显示目录中的最后 10 个文件。
但是$1 似乎对我不起作用。有什么办法可以在 bash 中引入变量。
【问题讨论】:
$1 等参数; bash 没有。
您可以使用set 定义$1,然后按预期使用您的别名:
$ alias tail_ls='ls -l "$1" | tail'
$ set mydir
$ tail_ls
【讨论】:
set mydir 将$1 定义为mydir,这将是预期的目录......不是那么好。
tail_ls() { ls -l "$1" | tail; }
【讨论】:
} 之前缺少;)和双引号$1,以便还支持带有嵌入空格和其他shell 元字符的文件名。
alias tail_ls='_tail_ls() { ls -l "$1" | tail ;}; _tail_ls'
【讨论】:
@maxim-sloyko 的解决方法不行,但是如果出现以下情况:
在~/.bashrc 中添加:
sendpic () { scp "$@" mina@foo.bar.ca:/www/misc/Pictures/; }
保存文件并重新加载
$ source ~/.bashrc
并执行:
$ sendpic filename.jpg
原文来源:http://www.linuxhowtos.org/Tips%20and%20Tricks/command_aliases.htm
【讨论】:
typeset -f >> ~/.bashrc
如果您使用的是 Fish shell(来自 http://fishshell.com)而不是 bash,它们编写的函数会略有不同。
您需要向您的~/.config/fish/config.fish 添加类似的内容,这相当于您的~/.bashrc
function tail_ls
ls -l $1 | tail
end
【讨论】:
我会为此创建一个函数,而不是别名,然后将其导出,如下所示:
function tail_ls { ls -l "$1" | tail; }
export -f tail_ls
注意-f 切换到export:它告诉它您正在导出一个函数。把它放在你的.bashrc 中,你就可以开始了。
【讨论】:
function tail_ls { ls -l "$1" | tail } 没有像 tail; } 这样的结尾是行不通的。