让alias支持位置参数

sh/bash/dash/ksh/zsh等Shell脚本
回复
riptide2012
帖子: 222
注册时间: 2011-12-14 10:21

让alias支持位置参数

#1

帖子 riptide2012 » 2012-08-14 13:26

linux下面,大家都会把常用的命令改成别名或则是函数来提高效率。

个人一直不喜欢函数,它不像别名那样一目了然,而别名不支持位置参数,这样实用性就大大折扣。

今天中午想到一种思路,比我之前采取的曲折路线要好五倍。特来分享下 :em11

代码: 全选

#!/bin/bash
#
# 让alias支持位置参数
#  
# 在启动文件中按下面的顺序source本脚本
#
# source ~/.zsh_aliases
# source ~/bin/aliaswrapper.sh
#
# Date: 20120814 12:52
# Author: riptide

_wrapalias_shell="zsh"

[ $BASH_VERSION  ] && _wrapalias_shell="bash"

alias_file=`readlink -m $HOME/.${_wrapalias_shell}_aliases`

sed 's/\(\s*alias\s*.*\)\(\s*#.*\)/\1/' $alias_file | grep -e "^\s*alias" | grep -e "\$[1-9\*]" | sed 's/\(alias\ \)\(.*\)=[\x27\x22]\(.*\)[\x27\x22]\s*$/function \2 () { \3 }/' | while read -r func ; do 
	[ $1 ] && echo $func
	unalias `echo $func | cut -d" " -f2`
	eval "$func"
done
举下例子吧:只要正常的写别名,带上你要的位置参数,就可以了

代码: 全选

alias h="$1 --help | less"
alias ssh2="ssh -p $1 -qTfnN -D 7070 $2 " 
alias nohup2="nohup $1 > /dev/null 2>&1 & " 
alias xsel2=" $* | xsel -b "
上次由 riptide2012 在 2012-08-15 22:19,总共编辑 2 次。
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

Re: 让alias支持位置参数

#2

帖子 naturalaw » 2012-08-15 20:22

定义函数不好么,何必那样。
alias xsel2=" $1 | xsel -b "
起个好名字就行了。
  • The eternal law
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 让alias支持位置参数

#3

帖子 lilydjwg » 2012-08-15 21:51

naturalaw 写了:定义函数不好么,何必那样。
alias xsel2=" $1 | xsel -b "
起个好名字就行了。
不明白这条命令有什么用,猜测 xsel 漏掉了 -i 参数 :em04
riptide2012
帖子: 222
注册时间: 2011-12-14 10:21

Re: 让alias支持位置参数

#4

帖子 riptide2012 » 2012-08-15 21:58

naturalaw 写了:定义函数不好么,何必那样。
alias xsel2=" $1 | xsel -b "
起个好名字就行了。
名字是记的,这个是用来方便书写的。

我有很多这样一行的脚本,不高兴每次都写这种

代码: 全选

function xxxx (){

}
不好看,不简洁。

而且我这种方法还有很多可以扩展的地方,像下面这个:

代码: 全选

alias nohup2="nohup $1 > /dev/null 2>&1 & " 
我可以用一个词noout代替 > /dev/null 2>&1 。写成这样

代码: 全选

alias nohup2="nohup $1 noout & " 
可以把一些shell的语法再简化 :em11
riptide2012
帖子: 222
注册时间: 2011-12-14 10:21

Re: 让alias支持位置参数

#5

帖子 riptide2012 » 2012-08-15 22:18

lilydjwg 写了:
naturalaw 写了:定义函数不好么,何必那样。
alias xsel2=" $1 | xsel -b "
起个好名字就行了。
不明白这条命令有什么用,猜测 xsel 漏掉了 -i 参数 :em04
你想象力不够哦 :em04 这个命令可以复制命令结果到剪贴板。 :em09 至于-i么 呵呵....
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 让alias支持位置参数

#6

帖子 lilydjwg » 2012-08-15 22:41

riptide2012 写了: [...]
而且我这种方法还有很多可以扩展的地方,像下面这个:

代码: 全选

alias nohup2="nohup $1 > /dev/null 2>&1 & " 
我可以用一个词noout代替 > /dev/null 2>&1 。写成这样

代码: 全选

alias nohup2="nohup $1 noout & " 
可以把一些shell的语法再简化 :em11
zsh 可以用

代码: 全选

alias -g noout=">/dev/null 2>&1"
riptide2012
帖子: 222
注册时间: 2011-12-14 10:21

Re: 让alias支持位置参数

#7

帖子 riptide2012 » 2012-08-15 22:56

恩,zsh是有这种很霸道的替换,还有很好的alias -s

不过bash什么的没有阿... 我觉得这个真心的方便,但大家好像都不怎么感兴趣 :em06
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 让alias支持位置参数

#8

帖子 lilydjwg » 2012-08-16 9:47

riptide2012 写了:恩,zsh是有这种很霸道的替换,还有很好的alias -s

不过bash什么的没有阿... 我觉得这个真心的方便,但大家好像都不怎么感兴趣 :em06
嗯,suffix alias 很好用,直接往命令行贴文件地址就打开了,不需要现场考虑和输入用什么工具打开。
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 让alias支持位置参数

#9

帖子 tusooa » 2012-08-27 14:28

lilydjwg 写了:
riptide2012 写了:恩,zsh是有这种很霸道的替换,还有很好的alias -s

不过bash什么的没有阿... 我觉得这个真心的方便,但大家好像都不怎么感兴趣 :em06
嗯,suffix alias 很好用,直接往命令行贴文件地址就打开了,不需要现场考虑和输入用什么工具打开。
xdg-open

代码: 全选

] ls -ld //
回复