使用 Bash 更改目录

使用 Bash 更改目录

我想知道是否有一种更简单的方法可以cd在当前目录中选择目录。

例如,有没有一种方法可以只获取当前目录的编号列表,并且能够执行cd 1cd 2cd 3等操作。是否有其他方法可以轻松地cd在当前目录中的子目录之间移动?

答案1

如果您autocd在 中设置了该选项,~/.bashrc则只需键入名称即可更改目录。与制表符补全相结合,您只需键入第一个唯一字符,然后点击Tab即可移动到所需的目录。

从手册中:

如果设置,则执行作为目录名称的命令名称,就好像它是 cd 命令的参数一样。此选项仅由交互式 shell 使用。

将选项添加到您的~/.bashrc

shopt -s autocd 

如果您使用 Zsh,请使用以下命令设置该选项:

setopt autocd 

答案2

添加一个函数到你的 ~/.bashrc

mycd() { local x; shopt -s {null,dot}glob; select x in ../ */; do cd "$x"; break; done; }

用法:mycd

答案3

使用补全!默认情况下,这要求您输入要切换到的目录的唯一前缀,然后按Tab。更准确地说,按Tab完成第一个唯一前缀。

您可以通过一些调整完成读行选项。特别是,设置show-all-if-ambiguous如果有多个可能的完成,则立即显示列表,或者show-all-if-unmodified仅当当前前缀由于歧义而无法进一步完成时才显示列表。这些选项进入文件~/.inputrc,例如:

set show-all-if-ambiguous on

Tab您可以将 bash 配置为在可能的完成中重复按旋转。为此,请将密钥绑定到menu-complete而不是默认的complete。在你的~/.inputrc

"\t": menu-complete

根据您的安装,完成后cd可能仅提供目录或所有文件。如果它提供所有文件,您需要启用上下文相关完成。确保bash 完成软件包已安装(它在大多数发行版中都可用)并且您拥有该行

. /etc/bash_completion

在你的~/.bashrc(或者/etc/bash.bashrc如果你的发行版有的话)。

兹什是一个替代 shell,它具有 bash 所缺乏的许多用于交互使用的优秀功能,包括在菜单中选择完成的可能性。您可能想尝试一下。

答案4

您还可以通过将当前目录文件路径分配给环境变量(例如...)来为要迁移到的每个目录使用单字符占位符。

    a=`pwd`
    b=`pwd`

等等。然后你可以使用以下命令跳转到每个目录:

    cd $a
    cd $b

请务必使用“反引号”,这意味着在引号之间执行命令,等号将输出分配给变量。

您还可以通过写出单字符变量来将路径分配给它们,例如:

    c="/home/user/projects/c++/headers/docs"

然后你可以使用...更改到该目录

    cd $c

相关内容