前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >20 行实现一个 bash 常用路径书签

20 行实现一个 bash 常用路径书签

作者头像
somenzz
发布2023-08-22 14:35:38
1660
发布2023-08-22 14:35:38
举报
文章被收录于专栏:Python七号

在运维的时候,需要经常 cd 到指定的位置去查日志、改代码,我常常无法忍受一些人那缓慢的打字速度,还经常输入错误,为什么不用用这个 20 行代码的工具呢?

将下列代码保存成 /path/to/m.sh 然后在 .bashrc 里 source /path/to/m.sh ,就可以使用了。

0)m + 将当前路径保存为以最后一级目录名称为书签;

1)m +foo 将当前路径保存为名称为 foo 的书签,注意加号和名称之间没有空格;

2)m -foo 删除名为 foo 的书签,注意减号号和名称之间没有空格;

3)m foo 跳转;

4)m 列出所有书签;

5)m /bar 搜索名字匹配 bar 的书签;

代码如下:

代码语言:javascript
复制
# bash directory bookmark
function cd_mark() {
    MARKPATH="${MARKPATH:-$HOME/.local/share/marks}"
    [ -d "$MARKPATH" ] || mkdir -p -m 700 "$MARKPATH" 2> /dev/null
    case "$1" in
        +*)            # m +foo  - add new bookmark for $PWD
            ln -snf "$(pwd)" "$MARKPATH/${1:1}" 
            ;;
        -*)            # m -foo  - delete a bookmark named "foo"
            rm -i "$MARKPATH/${1:1}" 
            ;;
        /*)            # m /bar  - search bookmarks matching "bar"
            find "$MARKPATH" -type l -name "*${1:1}*" | \
                awk -F "/" '{print $NF}' | MARKPATH="$MARKPATH" xargs -I'{}'\
                sh -c 'echo "{} ->" $(readlink "$MARKPATH/{}")'
            ;;
        "")            # m       - list all bookmarks
            command ls -1 "$MARKPATH/" | MARKPATH="$MARKPATH" xargs -I'{}' \
                sh -c 'echo "{} ->" $(readlink "$MARKPATH/{}")'
            ;;
        *)             # m foo   - cd to the bookmark directory
            local dest="$(readlink "$MARKPATH/$1" 2> /dev/null)"
            [ -d "$dest" ] && cd "$dest" || echo "No such mark: $1"
            ;;
    esac
}

# by default, alias cd_mark to m
alias ${MARKCMD:-m}='cd_mark'

我使用过后觉得超级实用,甚至比 zsh 中的 z 跳转还要好用,部署相当简单。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档