LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 738|回复: 4

終於把字符底下進出目錄的方式,改得比較方便了,跟大家分享一下設定值。

[复制链接]
发表于 2009-9-6 19:51:17 | 显示全部楼层 |阅读模式
改善字符模式底下,目錄前進後退的方式。
在~/.profile寫下面這幾行
  1. function cd
  2. {
  3.     if test "$@" = ".."
  4.         then builtin cd ..
  5.     elif test "$@" = "."
  6.         then builtin cd .
  7.     elif test "$@" = "-"
  8.         then builtin cd -
  9.     else pushd "$@">/dev/null
  10.     fi
  11. }
  12. function bd { pushd +1>/dev/null; }
  13. function fd { pushd -0>/dev/null; }
  14. alias vd="dirs -v"
复制代码

在字符模式,可以使用cd進入目錄,bd (back directory)退回,fd (forward directory)往前,並使用vd,可以看到目錄堆疊的狀態。
  1. [root@jiunypc ~  ~]# cd /etc/cron.daily
  2. [root@jiunypc ~  cron.daily]# cd /var/lib/pacman/local
  3. [root@jiunypc cron.daily  local]# bd
  4. [root@jiunypc ~  cron.daily]# fd
  5. [root@jiunypc cron.daily  local]# vd
  6. 0  /var/lib/pacman/local
  7. 1  /etc/cron.daily
  8. 2  ~
  9. 3  ~
复制代码

然後我們希望字符底下的提示符號,可以告訴我們一些目錄的訊息,如下面的設定可以顯示成這個樣子.
  1. #jiunypc是你的主機名稱, rtorrent是你現在目錄的位址, etc是你前一個目錄的位址,
  2. #root是你的帳號,
  3. [root@jiunypc etc  rtorrent]#
复制代码
  1. blue=`tput setf 1`
  2. green=`tput setf 2`
  3. cyan=`tput setf 3`
  4. red2=`tput setf 4`
  5. pink=`tput setf 5`
  6. olive=`tput setf 6`
  7. gray=`tput setf 7`
  8. slategray=`tput setf 8`
  9. red=`tput setf 9`
  10. #如果顯示完整的目錄地址,那真的太長了,不美觀也浪費終端機的行數,
  11. #所以用basename這個指令取得比較短的地址。
  12. PS1="\[$green\][\[$blue\]\u@\h \[$red\]\$(basename \$(dirs +1))  \$(basename \$(dirs +0))\[$green\]]\[$olive\]#\[$red\] ";export PS1
复制代码

基本上一開始會提示如下的錯誤的訊息,不用管它。(那個沒關係)
  1. -bash: dirs: directory stack empty
  2. basename: missing operand
  3. 請嘗試執行‘basename --help’來獲取更多資訊。
复制代码

不然你也可以把這一行寫在~/.profile的最下面。
  1. #一開始先丟一個~給堆疊,避免$PS1提示錯誤
  2. pushd ~ >/dev/null
复制代码
发表于 2009-9-6 20:32:51 | 显示全部楼层
一天下来不知道目录栈会有多大。
其实,必要时我会手动使用目录栈。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-6 21:47:09 | 显示全部楼层
Post by ch_fb;2024560
一天下来不知道目录栈会有多大。
其实,必要时我会手动使用目录栈。


其實一開始我也有點怕這個問題,
後來發現,
其實根本不用擔心這個,
打開一個終端,
堆疊就被清掉了,
終端跟終端之間不會互相影響,

不過,這個也是缺點,一個終端沒辦法用到過去進出過得目錄,只能重頭開始。

這些設定,適用於在5個目錄之間穿梭的,穿梭10個100個也是可以,只是要按10個bd而已,要用到過去第5個以上的目錄,最好還是vd然後手動複製貼上,所以如果只在5個左右的目錄穿梭,那打開一個終端目錄隊列就會被清除,那只重頭開始5個目錄也不是甚饃大問題了。

研究了好久,才把這個搞出來,這個比較實用,可以更不要那麼依賴圖形底下操作,轉成字符底下操作的關鍵之一,另一個東西我想應該是readline這個東東,不過我還沒研究。
回复 支持 反对

使用道具 举报

发表于 2009-9-6 23:38:16 | 显示全部楼层
赞一个, LZ这个方法很有启发.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-7 15:38:55 | 显示全部楼层
做個小修改,讓cd 15,進入到過去的第15個目錄,這樣連手動複製貼上的動作的省了。
  1. function cd
  2. {
  3.     if test "$@" = ".."
  4.         then builtin cd ..
  5.     elif test "$@" = "."
  6.         then builtin cd .
  7.     elif test "$@" = "-"
  8.         then builtin cd -
  9. #增加下面這兩行,假如cd後面的參數是數字,而且當前的目錄底下,沒有這個目錄,那就回到
  10. #過去歷史的目錄。
  11.     elif test ! "$(echo "$@" | grep -Eie "^[0-9]*$")" = "" -a ! -d "$PWD/$@"
  12.         then pushd +"$@">/dev/null
  13.     else pushd "$@">/dev/null
  14.     fi
  15. }
复制代码
  1. [ srv# sbin]# echo $PWD
  2. /sbin
  3. [ srv# sbin]# echo $OLDPWD
  4. /srv
  5. [ srv# sbin]# vd
  6. 0  /sbin
  7. 1  /srv
  8. 2  ~/down
  9. 3  /var
  10. 4  /bin
  11. 5  /etc
  12. 6  ~
  13. 7  ~/resys
  14. [ srv# sbin]# cd 2
  15. [ var# down]# mkdir 4
  16. [ var# down]# cd 4
  17. [ down# 4]# echo $PWD
  18. /root/down/4
复制代码
  1. #把原本的alias vd="dirs -v",改為如下,這樣比較實用
  2. alias vd="dirs -v | tac -"
  3. [ bin# jstc]# vd
  4. 5  ~/resys
  5. 4  ~
  6. 3  /var
  7. 2  /sbin
  8. 1  /bin
  9. 0  ~/jstc
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表