如何在shell中创建别名以转到父目录

时间:2015-04-21 12:13:53

标签: linux macos bash ubuntu

我想知道如何为没有别名的父目录创建一个带有无穷无尽参数的别名!

目前我已经编写了这个功能来实现它并且运行良好。

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

您可以像b ..b ...b .

一样使用它

我想要的是在没有&#34; b&#34;的情况下使用它,只是点!我们怎样才能动态地制作它?

编辑:

输入 - 输出

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

提前致谢!

2 个答案:

答案 0 :(得分: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"'

它的工作原理如下:

[thomas@corellia e]$ pwd
/tmp/a/b/c/d/e
[thomas@corellia e]$ .....
[thomas@corellia tmp]$ pwd
/tmp
[thomas@corellia tmp]$ alias
alias ..='cd ../../'
alias ...='cd ../../../'
alias ....='cd ../../../../'
alias .....='cd ../../../../../'

答案 1 :(得分:0)

我只是采取安全但无聊的路线,并为每个级别的点定义一个别名,直到某个实际的最大值:

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

它并不有趣,但它也没有任何奇怪的副作用。