gpt4 book ai didi

bash - 代码挑战 : Bash prompt path shortener

转载 作者:行者123 更新时间:2023-11-29 08:44:43 24 4
gpt4 key购买 nike

我为将 bash 包含在 PS1 环境变量中实现了一个提示路径缩短器,它将工作目录缩短为更紧凑但仍具有描述性的内容。我很好奇可能存在哪些其他想法。

这是挑战:

创建一个 bash 函数 _dir_chomp,它可以像这样包含到 PS1 中(插入换行符以提高可读性):

PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] $(
_dir_chomp "$(pwd)" 20
)\[\033[01;37m\]$(parse_git_branch)\[\033[01;34m\] \$\[\033[00m\] '

以“20”作为最大长度的参数作为软限制。这些是示例:

  1. /usr/portage/media-plugins/banshee-community-extensions/files 变成 /u/p/m/b/files
  2. /home/user1/media/video/music/live-sets 变为 ~/m/v/m/live-sets(注意 ~ 字符作为替换$HOME)
  3. /home/user2/media 不改变(不超过 20 个字符的限制)
  4. /home/user1/this-is-a-very-long-path-name-with-more-than-20-chars 变成 ~/this-is-a-非常长的路径名与超过 20 个字符(最后一个组件保持未缩短:软限制)
  5. /home/user1/src 变为 ~/src ($HOME 总是缩写)
  6. /home/user1/.kde4/share/config/kresources 变为 ~/.k/s/c/kresources (注意前缀点被保留)

当前用户是 user1。

可以调用awkperlrubypython等外部解释器,但不能调用编译好的C程序或类似的。换句话说:不允许使用外部源文件,代码必须是内联的。最短的版本获胜。 bash 函数体(和称为子函数)的长度很重要,意味着:

_sub_helper() {
# this counts
}
_dir_chomp() {
# these characters count (between { and })
_sub_helper "foobar" # _sub_helper body counts, too
}

最佳答案

纯 Bash:

_dir_chomp () {
local IFS=/ c=1 n d
local p=(${1/#$HOME/\~}) r=${p[*]}
local s=${#r}
while ((s>$2&&c<${#p[*]}-1))
do
d=${p[c]}
n=1;[[ $d = .* ]]&&n=2
((s-=${#d}-n))
p[c++]=${d:0:n}
done
echo "${p[*]}"
}

出于测试目的,我假设该问题意味着当前用户是“user1”。

注意:Bash 4 有一个变量 PROMPT_DIRTRIM,它通过保留子目录的数量来缩短 PS1 中的 \w 转义符它的值并将其余部分替换为 ...

/$ PROMPT_DIRTRIM=2
/$ echo $PS1
\w\$
/$ pwd
/
/$ cd /usr/share/doc/bash
.../doc/bash$

关于bash - 代码挑战 : Bash prompt path shortener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3497885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com