2

在我的文件系统旅行中,我发现为cd ... 因此,我在 .bashrc 中添加了几行:

alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."

所以模式是在第一个点之后,尾随点的数量是要爬升的层次结构备份的目录数量。我想让它可扩展,理想情况下带有功能或其他东西,这样我就可以输入$ ......并让它带我到cd ../../../../... 这样的事情可能吗?或者我是否应该继续在我的 .bashrc 中添加行以覆盖我认为我想一次性返回的尽可能多的地面?

4

3 回答 3

4

您可以使用函数而不是别名来完成。当 shell 函数运行时,${FUNCNAME[0]}包含函数的名称。

whatsyourname() {
    echo "I am ${FUNCNAME[0]}"
}

但我不明白这一点。您仍然必须使用此定义定义所有单独的别名或函数。没有办法说“任何只是一堆点的命令都应该运行这个函数”并让它计算点。

为什么不定义一个up带参数的函数,即要上升的级别数?也up 3会这样做。cd ../../..

于 2013-07-03T19:00:22.493 回答
1

我不认为有一种方法可以完全按照您的意愿进行操作,但是实现一个可以调用如下的脚本将非常简单up ...(arbitrary number of .'s)...

您真正需要的是一种在输入任意数量.的 > 2 时使 BASH 调用单个函数的方法。这似乎是“通配符函数名称”之类的东西,我认为这是不可能的。

于 2013-07-03T19:00:44.150 回答
1

把它放在你的.bashrc

cd_func() {
    builtin cd "$(echo "$1" \
    | sed -e ':a
              s@\.\.\.@../..@g
              t a')"
}

alias cd=cd_func

然后cd ...与 相同cd ../..cd ....与 相同cd ../../..,依此类推,任意多个点。你甚至cd ..../foo/bar可以快速移动。

在 DOS 时代,这在命令行的任何地方都有效。cd, dir, 和所有程序都处理了在层次结构中n提到文件夹级别的任何点序列。n很棒,但是在 Windows XP 和新版本中cmd.exe它停止工作了……</p>

于 2013-07-03T21:50:30.643 回答