分页: 1 / 1

让alias支持位置参数

发表于 : 2012-08-14 13:26
riptide2012
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 "

Re: 让alias支持位置参数

发表于 : 2012-08-15 20:22
naturalaw
定义函数不好么,何必那样。
alias xsel2=" $1 | xsel -b "
起个好名字就行了。

Re: 让alias支持位置参数

发表于 : 2012-08-15 21:51
lilydjwg
naturalaw 写了:定义函数不好么,何必那样。
alias xsel2=" $1 | xsel -b "
起个好名字就行了。
不明白这条命令有什么用,猜测 xsel 漏掉了 -i 参数 :em04

Re: 让alias支持位置参数

发表于 : 2012-08-15 21:58
riptide2012
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

Re: 让alias支持位置参数

发表于 : 2012-08-15 22:18
riptide2012
lilydjwg 写了:
naturalaw 写了:定义函数不好么,何必那样。
alias xsel2=" $1 | xsel -b "
起个好名字就行了。
不明白这条命令有什么用,猜测 xsel 漏掉了 -i 参数 :em04
你想象力不够哦 :em04 这个命令可以复制命令结果到剪贴板。 :em09 至于-i么 呵呵....

Re: 让alias支持位置参数

发表于 : 2012-08-15 22:41
lilydjwg
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"

Re: 让alias支持位置参数

发表于 : 2012-08-15 22:56
riptide2012
恩,zsh是有这种很霸道的替换,还有很好的alias -s

不过bash什么的没有阿... 我觉得这个真心的方便,但大家好像都不怎么感兴趣 :em06

Re: 让alias支持位置参数

发表于 : 2012-08-16 9:47
lilydjwg
riptide2012 写了:恩,zsh是有这种很霸道的替换,还有很好的alias -s

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

Re: 让alias支持位置参数

发表于 : 2012-08-27 14:28
tusooa
lilydjwg 写了:
riptide2012 写了:恩,zsh是有这种很霸道的替换,还有很好的alias -s

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