分页: 1 / 2

请教各位高手alias使用

发表于 : 2008-07-22 10:51
jcauchy
我的shell是bash,alias普通用法我是知道的,但是给多个命令别名(多个命令间用分号" ; "隔开),我有一个地方不会,例如:
给mkdir和ls别名为md
alias md='mkdir;ls'
然后使用md aa(创建文件夹aa并显示当前目录下的文件)
结果显示错误:mkdir缺少操作符

其实小弟不懂之处在于如何将alias后的操作符传递到mkdir之后,呵呵~

还有ubuntu里man alias,显示alias没有帮助文档,帮助文档源里有下载吗?谢谢~~

发表于 : 2008-07-22 10:56
JangMunho
不要自作聪明,我知道你是什么意思,你是不是认为:
md aa会被解析成mkdir aa; ls aa?
这是不可能的,它只能被解析成
mkdir ; ls aa
因此提示缺少操作符,电脑没那么智能。
之所以没有man page是因为它是一个内部命令,就像cd命令,内部命令不可能有man page。

发表于 : 2008-07-22 11:02
yawsh
你想要实现的功能不是可以用shell脚本吗?

发表于 : 2008-07-22 11:05
jcauchy
以前我用过别人一个系统,它每次cd到一个目录下就会自动显示该目录下的文件
比如cd /home,它就相当于先cd /home然后ls,我就是不知到他是怎么设置别名的

发表于 : 2008-07-22 11:06
jcauchy
yawsh 写了:你想要实现的功能不是可以用shell脚本吗?
我希望可以写在.bashrc中

发表于 : 2008-07-22 11:10
JangMunho
jcauchy 写了:以前我用过别人一个系统,它每次cd到一个目录下就会自动显示该目录下的文件
比如cd /home,它就相当于先cd /home然后ls,我就是不知到他是怎么设置别名的
我恐怕不是别名,而是使用一个cd脚本掩盖掉了shell本身的cd。

发表于 : 2008-07-22 11:12
eexpress
jcauchy 写了:
yawsh 写了:你想要实现的功能不是可以用shell脚本吗?
我希望可以写在.bashrc中
直接写脚本到alias就是,一行而已,调用$*等当参数。

发表于 : 2008-07-22 11:14
JangMunho
eexpress 写了:
jcauchy 写了:
yawsh 写了:你想要实现的功能不是可以用shell脚本吗?
我希望可以写在.bashrc中
直接写脚本到alias就是,一行而已,调用$*等当参数。
对,不过我觉得他所希望的不是这样,但事实上想要满足他的要求只能这样了。

发表于 : 2008-07-22 11:19
BigSnake.NET
JangMunho 写了:
jcauchy 写了:以前我用过别人一个系统,它每次cd到一个目录下就会自动显示该目录下的文件
比如cd /home,它就相当于先cd /home然后ls,我就是不知到他是怎么设置别名的
我恐怕不是别名,而是使用一个cd脚本掩盖掉了shell本身的cd。
可以覆盖吗?

发表于 : 2008-07-22 11:23
JangMunho
BigSnake.NET 写了:
JangMunho 写了:
jcauchy 写了:以前我用过别人一个系统,它每次cd到一个目录下就会自动显示该目录下的文件
比如cd /home,它就相当于先cd /home然后ls,我就是不知到他是怎么设置别名的
我恐怕不是别名,而是使用一个cd脚本掩盖掉了shell本身的cd。
可以覆盖吗?
不知道,也没打算试验。
我觉得即便是搜索路径中存在一个叫cd的程序,shell也要优先执行它的内部命令,因此能覆盖的可能性不大。
PS:我应该看看bash的源代码就什么都明白了。

发表于 : 2008-07-22 11:26
BigSnake.NET

代码: 全选

my_cd () { cd "$@" ; ls ; };
alias cd=my_cd
注意只能设定一次, 不然就递归了

发表于 : 2008-07-22 11:28
JangMunho
BigSnake.NET 写了:

代码: 全选

my_cd () { cd "$@" ; ls ; };
alias cd=my_cd
注意只能设定一次, 不然就递归了
呵呵,那样就很搞笑了。

发表于 : 2008-07-22 11:32
eexpress
JangMunho 写了:
jcauchy 写了:以前我用过别人一个系统,它每次cd到一个目录下就会自动显示该目录下的文件
比如cd /home,它就相当于先cd /home然后ls,我就是不知到他是怎么设置别名的
我恐怕不是别名,而是使用一个cd脚本掩盖掉了shell本身的cd。
/usr/local/bin下建立一个cd就是。cd $*;ls

$PATH按照次序来执行的。

发表于 : 2008-07-22 11:37
jcauchy
我用过那个人电脑后觉得很方便,就把他的.cshrc文件直接拷到我的电脑上了,结果我也可以这样用了,我觉得不是脚本吧,当时我忘记看.cshrc了
现在想这么设置,却不知道怎么设置,那个人是我的师兄,现在已经毕业了

发表于 : 2008-07-22 11:40
BigSnake.NET
eexpress 写了:
JangMunho 写了:
jcauchy 写了:以前我用过别人一个系统,它每次cd到一个目录下就会自动显示该目录下的文件
比如cd /home,它就相当于先cd /home然后ls,我就是不知到他是怎么设置别名的
我恐怕不是别名,而是使用一个cd脚本掩盖掉了shell本身的cd。
/usr/local/bin下建立一个cd就是。cd $*;ls

$PATH按照次序来执行的。
试过了, 优先执行内部命令