sh/bash/dash/ksh/zsh等Shell脚本
-
riptide2012
- 帖子: 222
- 注册时间: 2011-12-14 10:21
#1
帖子
由 riptide2012 » 2012-08-14 13:26
linux下面,大家都会把常用的命令改成别名或则是函数来提高效率。
个人一直不喜欢函数,它不像别名那样一目了然,而别名不支持位置参数,这样实用性就大大折扣。
今天中午想到一种思路,比我之前采取的曲折路线要
好五倍。特来分享下
代码: 全选
#!/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 "
-
naturalaw
- 帖子: 1360
- 注册时间: 2011-09-06 22:04
#2
帖子
由 naturalaw » 2012-08-15 20:22
定义函数不好么,何必那样。
alias xsel2=" $1 | xsel -b "
起个好名字就行了。
-
lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#3
帖子
由 lilydjwg » 2012-08-15 21:51
naturalaw 写了:定义函数不好么,何必那样。
alias xsel2=" $1 | xsel -b "
起个好名字就行了。
不明白这条命令有什么用,猜测 xsel 漏掉了 -i 参数

-
riptide2012
- 帖子: 222
- 注册时间: 2011-12-14 10:21
#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的语法再简化

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

你想象力不够哦

这个命令可以复制命令结果到剪贴板。

至于-i么 呵呵....
-
lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#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的语法再简化

zsh 可以用
代码: 全选
alias -g noout=">/dev/null 2>&1"
-
riptide2012
- 帖子: 222
- 注册时间: 2011-12-14 10:21
#7
帖子
由 riptide2012 » 2012-08-15 22:56
恩,zsh是有这种很霸道的替换,还有很好的alias -s
不过bash什么的没有阿... 我觉得这个真心的方便,但大家好像都不怎么感兴趣

-
lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#8
帖子
由 lilydjwg » 2012-08-16 9:47
riptide2012 写了:恩,zsh是有这种很霸道的替换,还有很好的alias -s
不过bash什么的没有阿... 我觉得这个真心的方便,但大家好像都不怎么感兴趣

嗯,suffix alias 很好用,直接往命令行贴文件地址就打开了,不需要现场考虑和输入用什么工具打开。
-
tusooa
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
-
联系:
#9
帖子
由 tusooa » 2012-08-27 14:28
lilydjwg 写了:riptide2012 写了:恩,zsh是有这种很霸道的替换,还有很好的alias -s
不过bash什么的没有阿... 我觉得这个真心的方便,但大家好像都不怎么感兴趣

嗯,suffix alias 很好用,直接往命令行贴文件地址就打开了,不需要现场考虑和输入用什么工具打开。
xdg-open