📜  在 linux 中添加折叠到路径 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:37:24.020000             🧑  作者: Mango

在 Linux 中添加折叠到路径 - Shell/Bash

在 Linux 中,我们经常需要处理各种路径,有时路径比较长,不便于阅读和编辑。这时可以使用折叠(folding)来缩短路径长度,使其更易于处理。

什么是折叠

折叠(folding)是一种缩短路径长度的方法,它通过将路径中一部分缩写为一个单词来实现。例如,将 /usr/local/bin 缩写为 /u/l/bin。

在 Linux 中,类似的折叠机制已经被广泛应用,例如命令行中的补全(auto-completion)、历史记录(history)等。

如何添加折叠到路径

在 Linux 中,可以使用 shell 脚本或者 Bash 命令来实现路径折叠。下面以 Bash 命令为例,介绍如何添加折叠到路径。

准备工作

首先需要安装 Bash 及相关工具,例如 Unicode 字符集。在 Ubuntu 中,可以使用以下命令安装:

sudo apt-get update
sudo apt-get install bash unicode
添加折叠

在 Bash 中,可以通过定义一个 shell 函数来实现路径折叠。例如,下面的函数将 /usr/local/bin 折叠为 /u/l/bin:

function fold_path() {
  local path="$1"
  path="${path#/}"
  path="${path%/}"
  path="$(echo "$path" | sed 's/\([\/]\)[^\/]*\([\/]\)/\1\2/g')"
  echo "/$path"
}

使用示例:

$ fold_path /usr/local/bin
/u/l/bin

该函数的实现原理是使用 sed 工具,将路径中的每一个目录名除第一个和最后一个以外的部分缩写为单个字母。

自动折叠

除了手动使用 fold_path 函数,还可以将其绑定到 Bash 的自动补全功能中,使得路径在输入时自动折叠。例如,可以将以下代码添加到 Bash 的配置文件 .bashrc 中:

function _fold_path_completion() {
  local path="${COMP_WORDS[COMP_CWORD]}"
  path="$(fold_path "$path")"
  COMPREPLY=( $(compgen -d -- "$path") )
}
complete -F _fold_path_completion cd

该代码会将 cd 命令的自动补全功能修改为使用 fold_path 函数自动折叠路径。例如:

$ cd /usr/l<TAB>

这时,/usr/local/ 将被自动折叠为 /u/l/,并以 /u/l/ 开头的目录名作为自动补全选项。

总结

在 Linux 中添加折叠到路径可以使得路径更易于处理,可以手动使用 fold_path 函数,也可以将其绑定到 Bash 的自动补全功能中。