+ -
当前位置:首页 → 问答吧 → 終於把字符底下進出目錄的方式,改得比較方便了,跟大家分享一下設定值。

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

时间:2009-09-06

来源:互联网

改善字符模式底下,目錄前進後退的方式。
在~/.profile寫下面這幾行

代码:
function cd 
{ 
 if test "$@" = ".."
        then builtin cd ..
 elif test "$@" = "."
        then builtin cd .
 elif test "$@" = "-"
        then builtin cd -
 else pushd "$@">/dev/null
 fi
}
function bd { pushd +1>/dev/null; }
function fd { pushd -0>/dev/null; }
alias vd="dirs -v"
在字符模式,可以使用cd進入目錄,bd (back directory)退回,fd (forward directory)往前,並使用vd,可以看到目錄堆疊的狀態。

代码:
[root@jiunypc ~ ~]# cd /etc/cron.daily
[root@jiunypc ~ cron.daily]# cd /var/lib/pacman/local
[root@jiunypc cron.daily local]# bd
[root@jiunypc ~ cron.daily]# fd
[root@jiunypc cron.daily local]# vd
 0 /var/lib/pacman/local
 1 /etc/cron.daily
 2 ~
 3 ~
然後我們希望字符底下的提示符號,可以告訴我們一些目錄的訊息,如下面的設定可以顯示成這個樣子.

代码:
#jiunypc是你的主機名稱, rtorrent是你現在目錄的位址, etc是你前一個目錄的位址, 
#root是你的帳號,
[root@jiunypc etc rtorrent]#
代码:
blue=`tput setf 1`
green=`tput setf 2`
cyan=`tput setf 3`
red2=`tput setf 4`
pink=`tput setf 5`
olive=`tput setf 6`
gray=`tput setf 7`
slategray=`tput setf 8`
red=`tput setf 9`

#如果顯示完整的目錄地址,那真的太長了,不美觀也浪費終端機的行數,
#所以用basename這個指令取得比較短的地址。
PS1="\[$green\][\[$blue\]\u@\h \[$red\]\$(basename \$(dirs +1)) \$(basename \$(dirs +0))\[$green\]]\[$olive\]#\[$red\] ";export PS1
基本上一開始會提示如下的錯誤的訊息,不用管它。(那個沒關係)

代码:
-bash: dirs: directory stack empty
basename: missing operand
請嘗試執行‘basename --help’來獲取更多資訊。
不然你也可以把這一行寫在~/.profile的最下面。

代码:
#一開始先丟一個~給堆疊,避免$PS1提示錯誤
pushd ~ >/dev/null

作者: jiuny0209   发布时间: 2009-09-06

一天下来不知道目录栈会有多大。
其实,必要时我会手动使用目录栈。

作者: ch_fb   发布时间: 2009-09-07

引用:
作者: ch_fb
一天下来不知道目录栈会有多大。
其实,必要时我会手动使用目录栈。
其實一開始我也有點怕這個問題,
後來發現,
其實根本不用擔心這個,
打開一個終端,
堆疊就被清掉了,
終端跟終端之間不會互相影響,

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

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

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

作者: jiuny0209   发布时间: 2009-09-07

赞一个, LZ这个方法很有启发.

作者: kevinlei   发布时间: 2009-09-07

做個小修改,讓cd 15,進入到過去的第15個目錄,這樣連手動複製貼上的動作的省了。

代码:
function cd 
{ 
 if test "$@" = ".."
        then builtin cd ..
 elif test "$@" = "."
        then builtin cd .
 elif test "$@" = "-"
        then builtin cd -
#增加下面這兩行,假如cd後面的參數是數字,而且當前的目錄底下,沒有這個目錄,那就回到
#過去歷史的目錄。
 elif test ! "$(echo "$@" | grep -Eie "^[0-9]*$")" = "" -a ! -d "$PWD/$@"
        then pushd +"$@">/dev/null
 else pushd "$@">/dev/null
 fi
}
代码:
[ srv# sbin]# echo $PWD
/sbin
[ srv# sbin]# echo $OLDPWD
/srv
[ srv# sbin]# vd
 0 /sbin
 1 /srv
 2 ~/down
 3 /var
 4 /bin
 5 /etc
 6 ~
 7 ~/resys
[ srv# sbin]# cd 2
[ var# down]# mkdir 4
[ var# down]# cd 4
[ down# 4]# echo $PWD
/root/down/4
代码:
#把原本的alias vd="dirs -v",改為如下,這樣比較實用
alias vd="dirs -v | tac -"

[ bin# jstc]# vd
 5 ~/resys
 4 ~
 3 /var
 2 /sbin
 1 /bin
 0 ~/jstc

作者: jiuny0209   发布时间: 2009-09-07