查看 cd-alias 的问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
lymslive
帖子: 72
注册时间: 2010-09-02 19:47

查看 cd-alias 的问题

#1

帖子 lymslive » 2010-09-27 0:33

使用终端发现进入目录的操作非常频繁
所以想到用别名表示一些最常用的目录
参考windows命令行用单字母(D:)更改驱动器的做法
我设计的 cd-alias 全用单字母缩写
同时考虑忘记别名的时候,也要提供一个快捷命令来查看已经定义的目录别名

比如我在 ~/.bash_aliases 中添加以下大段内容

代码: 全选

alias a="cd /etc/apt"
alias A="cd ."
alias s="cd ~/Soft"
alias S="cd ."
alias d="cd ~/Downloads"
alias D="cd ~/Document"
alias f="cd /home/pancf"
alias F="cd ."
alias g="cd .."
alias G="cd ../.."

alias h="cd ~"
alias H="cd /home"
alias j="cd ."
alias J="cd ."
alias k="cd ."
alias K="cd ."
alias l="cd /home/library"
alias L="cd /usr/local"

alias q="cd ."
alias Q="cd ."
alias w="cd /home/wsnake"
alias W="cd ."
alias e="cd /etc"
alias E="cd ."
alias r="cd ."
alias R="cd ."
alias t="cd ~/Desktop"
alias T="cd ."

alias y="cd ."
alias Y="cd ."
alias u="cd /usr"
alias U="cd ."
alias i="cd ."
alias I="cd ."
alias o="cd ."
alias O="cd ."
alias p="cd ~/Picture"
alias P="cd ."

alias z="cd /media"
alias Z="cd /mnt"
alias x="cd ."
alias X="cd ."
alias c="cd ~/.config"
alias C="cd ."
# alias v="cd ." # retained for view cd aliases
# alias V="cd ." # retained for view cmd aliases
alias b="cd ~/bin"
alias B="cd ~/usr/bin"
alias n="cd ."
alias N="cd ."
alias m="cd ~/Music"
alias M="cd ~/Video"
让每个字母快速进入一个目录,“未定义”的字母执行 "cd ." 完全无害(无参数cd 回到 ~,倒有点意外)
现在我想解决的问题的是如果快速查看“已定义”的目录别名
在终端中输入:

代码: 全选

alias | egrep "alias [^:space:]='cd .*'" | egrep -v " \.'$"
可以打印出正确结果
另外

代码: 全选

alias | egrep "alias [^:space:]{2,}=.*"
可以显示非单字母的命令别名

但是这两条语句太长,我想用预留的字母v(两个,大小写)来执行类似的命令
那应该怎么办?

我试过把
alias | egrep "alias [^:space:]='cd .*'" | egrep -v " \.'$"
写入 ~/bin/v-cd 文件中,再用单字母别名之
但是在终端中运行 v-cd 文件,没什么输出信息,也没错误信息提示
为什么同一条语句命令写在脚本里与直接输在终端中会有这些的输出差别?

求解决方案,本人新学 linux,不太懂shell编程。
现用系统:ubuntu 9.10 ,默认终端
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 查看 cd-alias 的问题

#2

帖子 aerofox » 2010-09-27 12:43

你可以在 ~/bin/v-cd 文件开头先 source ~/.bash_aliases,或者在 .bashrc 中设置 BASH_ENV 环境变量,详见 bash manpage 的“启动”一节。
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 查看 cd-alias 的问题

#3

帖子 tusooa » 2010-09-27 16:41

首先,把所有的cd .都改成:。
其次,用ccdd。

代码: 全选

] ls -ld //
lymslive
帖子: 72
注册时间: 2010-09-02 19:47

Re: 查看 cd-alias 的问题

#4

帖子 lymslive » 2010-09-27 20:10

tusooa 写了:首先,把所有的cd .都改成:。
其次,用ccdd。
没发现冒号是好东西
那个 ccdd 是什么意思呢
lymslive
帖子: 72
注册时间: 2010-09-02 19:47

Re: 查看 cd-alias 的问题

#5

帖子 lymslive » 2010-09-27 20:15

pocoyo 写了:记得住 :em20
这不完全是记得住记不住的问题
我是希望这个运用想法能有扩展
直接从头编辑 .bash_aliases 是很稀疏的
最好能写个脚本实现这样的功能,
在使用是把当前目录(或其他想到的可能常用的目录)快捷地赋给某一字母,并写回启动文件,下次起动终端时还能用……
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: 查看 cd-alias 的问题

#6

帖子 astolia » 2010-09-27 21:22

稍微学一下shell就知道这其实是很简单的事
把这段加入你的~/.bashrc

代码: 全选

. ~/.bash_aliases
function def() {
    local FILE=~/.bash_aliases
    test -z "$1" && cat "$FILE" && return
    test -f "$FILE" && sed -i "/^alias $1=/d" "$FILE"
    test -z "$2" && local DIR="$PWD" || local DIR="$2"
    if [ "$DIR" = "-" ];then
        unalias "$1" 2>/dev/null
    else
        echo "alias $1='cd $(echo "$DIR" | sed 's/['"'"'" \t$?*`\\]/\\\0/g' | sed s/\'/\'\"\'\"\'/g)'">> "$FILE"
    fi
    . "$FILE"
}
以后再新开的bash里面,使用

代码: 全选

def aaa   #把进入当前目录设成了aaa 
def aaa /tmp #把进入/tmp设成了aaa
def aaa - #删除aaa的alias
def #列出当前所有alias
上次由 astolia 在 2010-09-28 11:29,总共编辑 3 次。
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 查看 cd-alias 的问题

#7

帖子 tusooa » 2010-09-27 22:02

lymslive, 自己搜索下。
ccdd site:ubuntu.org.cn
eexpress的那个,就是。

代码: 全选

] ls -ld //
lymslive
帖子: 72
注册时间: 2010-09-02 19:47

Re: 查看 cd-alias 的问题

#8

帖子 lymslive » 2010-09-28 9:58

谢谢楼上各位,学习了……
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 查看 cd-alias 的问题

#9

帖子 eexpress » 2010-09-28 11:02

把cd的补全加强就是
1。大小写自动
2。拼音补全
3。使用CDPATH变量
● 鸣学
回复