sh/bash/dash/ksh/zsh等Shell脚本
-
riptide2012
- 帖子: 222
- 注册时间: 2011-12-14 10:21
#1
帖子
由 riptide2012 » 2012-03-29 20:59
有一些常用的命令,却不太适合写alias,因为一些要附加的参数不在最后
比如
代码: 全选
#造一个临时目录
mkdir test && cd test
#复制某个命令的结果到剪贴版
ls | xsel -b
有的人说要写function。
比如
代码: 全选
function xxx (){
mkdir $1 && cd $1
}
alias mkdir2=xxx
这样的话就要写好多个。
有没有简单的方法。处理这种情况?
我现在用一种比较土的办法。生成一个文件去执行它。
代码: 全选
script_path="/tmp/__flexcmd.sh"
echo "#! /bin/bash" > "$script_path"
echo "# generated by script" >> "$script_path"
echo $1 | tr '%' '$' >> "$script_path"
shift 1
source $script_path $@
echo -n "[ $@ ] ==> "
sed -ne '3p' "$script_path"
.bash_aliases
代码: 全选
export FLEX=/home/xxxx/resources/mygit/stuff/bash/flexec
alias h=". $FLEX '%1 --help | less'"
alias nohup2=". $FLEX 'nohup %1 > /dev/null 2>&1 & '"
alias xsel2=". $FLEX ' %1 | xsel -b ' "
alias mkdir2=". $FLEX 'mkdir %1 && cd %1'"
大家有更好的办法么?
-
lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#2
帖子
由 lilydjwg » 2012-03-29 21:07
用函数。
[bash]
gcc () { # {{{2
errfile=$HOME/tmpfs/error
command gcc -g -Wall $@ >$errfile 2>&1
ret=$?
cat $errfile
return $ret
}
[/bash]
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#3
帖子
由 fnan » 2012-03-29 21:39
kose-1@kose-1-desktop:~$ alias mc='while read arg;do mkdir "$arg";cd "$arg";break;done <<< '
kose-1@kose-1-desktop:~$ mc test
kose-1@kose-1-desktop:~/test$
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
aerofox
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
#4
帖子
由 aerofox » 2012-03-29 22:40
riptide2012 写了:有一些常用的命令,却不太适合写alias,因为一些要附加的参数不在最后
比如
代码: 全选
#造一个临时目录
mkdir test && cd test
#复制某个命令的结果到剪贴版
ls | xsel -b
有的人说要写function。
比如
代码: 全选
function xxx (){
mkdir $1 && cd $1
}
alias mkdir2=xxx
这样的话就要写好多个。
有没有简单的方法。处理这种情况?
我现在用一种比较土的办法。生成一个文件去执行它。
代码: 全选
script_path="/tmp/__flexcmd.sh"
echo "#! /bin/bash" > "$script_path"
echo "# generated by script" >> "$script_path"
echo $1 | tr '%' '$' >> "$script_path"
shift 1
source $script_path $@
echo -n "[ $@ ] ==> "
sed -ne '3p' "$script_path"
.bash_aliases
代码: 全选
export FLEX=/home/xxxx/resources/mygit/stuff/bash/flexec
alias h=". $FLEX '%1 --help | less'"
alias nohup2=". $FLEX 'nohup %1 > /dev/null 2>&1 & '"
alias xsel2=". $FLEX ' %1 | xsel -b ' "
alias mkdir2=". $FLEX 'mkdir %1 && cd %1'"
大家有更好的办法么?
1. csh 支持 alias 中附加参数不在最后的方法,bash 似乎不支持。
2. bash 的函数功能比 alias 功能强大得多,完全可以替代 alias
3. 为什么定义 xxx 函数再 alias mkdir2=xxx?直接定义 mkdir2 函数就行了。楼主不会是不知道函数可以直接当命令使用吧?
4. “这样的话就要写好多个”,好多个什么?
-
枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
-
联系:
#5
帖子
由 枫叶饭团 » 2012-03-29 22:41
mark
-
riptide2012
- 帖子: 222
- 注册时间: 2011-12-14 10:21
#6
帖子
由 riptide2012 » 2012-03-29 23:40
aerofox 写了:
1. csh 支持 alias 中附加参数不在最后的方法,bash 似乎不支持。
2. bash 的函数功能比 alias 功能强大得多,完全可以替代 alias
3. 为什么定义 xxx 函数再 alias mkdir2=xxx?直接定义 mkdir2 函数就行了。楼主不会是不知道函数可以直接当命令使用吧?
4. “这样的话就要写好多个”,好多个什么?
3. 学习了,不知道可以直接用阿
4. 基于不知道3. 而我有许多这样的需求,所以自以为要写很多function,再定义到alias
代码: 全选
function mkdir2(){
mkdir $1 && cd $1
}
代码: 全选
alias mkdir2=". $FLEX 'mkdir %1 && cd %1'"
现在两种形式比较下,还是写function比较好。画蛇添足,丢人了
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#7
帖子
由 eexpress » 2012-03-30 9:47
在lin,函数也不需要的。自己维护一堆脚本很正常。何必固执于要都编程alias。
脱离bash,不更kiss嘛。
● 鸣学
-
aerofox
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
#8
帖子
由 aerofox » 2012-03-30 12:13
eexpress 写了:在lin,函数也不需要的。自己维护一堆脚本很正常。何必固执于要都编程alias。
脱离bash,不更kiss嘛。
启奏陛下,楼主举的例子是不适宜用独立脚本的。