2015-04-21 70 views
0

我想知道如何創建一個具有無限參數的別名,用於不帶別名的父目錄!如何在shell中創建別名以轉到父目錄

目前我已經寫了這個功能來實現它,並完美地工作。

b() { 
    list=$1 
    for ((i=0; i<${#list}; i++)); do 
    cd .. 
    done 
} 

您可以使用它像b ..b ...b .

我想的是,使用它沒有「b」,只是點事情!我們如何動態地做到這一點?

編輯:

輸入 - 提前輸出

.. => cd ../../ 
... => cd ../../../ 

謝謝!

+0

你想'b'本身做什麼?轉到父目錄? –

+0

'b'是任意的名字,你可以說任何你想要的,是的,去父目錄(ies) –

+0

不,他希望'..'自己去父目錄,'...'去到上面那個,等等。 – rojomoke

回答

0

如果你不介意按. n次之後定義N-1的別名,添加到您的.bashrc

function update_dots() { 
    READLINE_LINE=${READLINE_LINE}. 
    if [[ "$READLINE_LINE" =~ ^\.(\.+)$ ]]; then 
     DOT_CMD="cd ${READLINE_LINE//\./\.\.\/}" 
     alias $READLINE_LINE="$DOT_CMD" 
    fi 
    READLINE_POINT=$(($READLINE_POINT+1)) 
} 

bind -x '".":"update_dots"' 

它的工作原理是這樣的:

[[email protected] e]$ pwd 
/tmp/a/b/c/d/e 
[[email protected] e]$ ..... 
[[email protected] tmp]$ pwd 
/tmp 
[[email protected] tmp]$ alias 
alias ..='cd ../../' 
alias ...='cd ../../../' 
alias ....='cd ../../../../' 
alias .....='cd ../../../../../' 
0

我會只需採取安全而無聊的路線,併爲每個水平的點定義一個別名,達到一些實際的最大值:

dots="" 
for((i=0; i<10; i++)) 
do 
    dots+="." 
    alias "$dots=b $dots" 
done 

這並不有趣,但它也沒有任何奇怪的副作用。