大家写alias的时候,指定参数有什么好办法么?

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

大家写alias的时候,指定参数有什么好办法么?

#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
联系:

Re: 大家写alias的时候,指定参数有什么好办法么?

#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

Re: 大家写alias的时候,指定参数有什么好办法么?

#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

Re: 大家写alias的时候,指定参数有什么好办法么?

#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
联系:

Re: 大家写alias的时候,指定参数有什么好办法么?

#5

帖子 枫叶饭团 » 2012-03-29 22:41

mark
riptide2012
帖子: 222
注册时间: 2011-12-14 10:21

Re: 大家写alias的时候,指定参数有什么好办法么?

#6

帖子 riptide2012 » 2012-03-29 23:40

aerofox 写了:
1. csh 支持 alias 中附加参数不在最后的方法,bash 似乎不支持。
2. bash 的函数功能比 alias 功能强大得多,完全可以替代 alias
3. 为什么定义 xxx 函数再 alias mkdir2=xxx?直接定义 mkdir2 函数就行了。楼主不会是不知道函数可以直接当命令使用吧?
4. “这样的话就要写好多个”,好多个什么?
3. 学习了,不知道可以直接用阿 :em04

4. 基于不知道3. 而我有许多这样的需求,所以自以为要写很多function,再定义到alias :em20 :em20


代码: 全选

function mkdir2(){
   mkdir $1 && cd $1
}

代码: 全选

alias mkdir2=". $FLEX 'mkdir %1 && cd %1'"
现在两种形式比较下,还是写function比较好。画蛇添足,丢人了
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 大家写alias的时候,指定参数有什么好办法么?

#7

帖子 eexpress » 2012-03-30 9:47

在lin,函数也不需要的。自己维护一堆脚本很正常。何必固执于要都编程alias。

脱离bash,不更kiss嘛。
● 鸣学
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 大家写alias的时候,指定参数有什么好办法么?

#8

帖子 aerofox » 2012-03-30 12:13

eexpress 写了:在lin,函数也不需要的。自己维护一堆脚本很正常。何必固执于要都编程alias。

脱离bash,不更kiss嘛。
启奏陛下,楼主举的例子是不适宜用独立脚本的。
头像
Methuselar
帖子: 122
注册时间: 2009-06-04 12:06
联系:

Re: 大家写alias的时候,指定参数有什么好办法么?

#9

帖子 Methuselar » 2012-03-31 15:57

function + autoload
Mea Culpa!
回复