📋 目录


1. 📖 背景介绍

1.1 📑 bashmarks工具简介

bashmarks 是一个用Shell脚本编写的目录书签管理工具,允许你保存和快速跳转到常用目录。

什么是目录书签?
想象一下,你每天都要访问几个固定的目录,比如:

  • 你的项目目录:/home/user/projects/myproject/src/main/java/com/example
  • 你的文档目录:/home/user/Documents/notes/2025/12
  • 你的下载目录:/home/user/Downloads

每次都要输入这么长的路径是不是很麻烦?bashmarks就像浏览器的书签一样,让你给这些常用目录起个简单的名字(比如myprojectnotes),以后只需要输入g myproject就能快速跳转过去!

核心功能

  • 📑 保存书签: 使用s命令保存当前目录为书签(就像浏览器收藏网页)
  • 🚀 快速跳转: 使用g命令快速跳转到书签目录(Go to bookmark)
  • 📋 打印路径: 使用p命令打印书签对应的目录路径(Print path)
  • 🗑️ 删除书签: 使用d命令删除不需要的书签(Delete bookmark)
  • 📊 列出书签: 使用l命令列出所有已保存的书签(List bookmarks)
  • ⌨️ Tab补全: 支持Tab键自动补全书签名称(输入g my<TAB>自动补全)

应用场景

  • 📁 快速访问常用项目目录: 开发时经常需要在多个项目间切换
  • 🔧 开发环境目录管理: 管理工具、配置文件等目录
  • 📚 文档目录快速导航: 快速访问笔记、文档等目录
  • 🎓 学习和教学目录管理: 管理学习资料、课程目录
  • 🚀 提高终端操作效率: 减少重复输入长路径,提高工作效率

为什么选择bashmarks?

  • 简单易学: 只有5个命令,几分钟就能掌握
  • 轻量级: 纯Shell脚本,无需安装额外软件
  • 跨平台: 支持所有Linux系统(包括OpenHarmony)
  • 持久化: 书签永久保存,重启终端也不丢失

1.2 🎯 适配目标

将bashmarks工具适配到鸿蒙PC(OpenHarmony PC)平台,实现:

  • 🐚 Shell脚本跨平台支持
  • 🏗️ 支持aarch64-linux-ohos架构
  • 📦 生成HNP格式的安装包
  • 📦 生成tar.gz格式的发布包
  • 💻 提供可执行的bashmarks脚本

1.3 🔧 技术栈

  • 语言: 🐚 Bash Shell Script
  • 构建系统: Makefile
  • 目标平台: 🎯 aarch64-linux-ohos
  • 打包格式: 📦 HNP (HarmonyOS Native Package)
  • 依赖: 无外部依赖(纯Shell脚本)

1.4 💡 工具优势

相比手动输入长路径,bashmarks提供了:

  • 快速访问: 一条命令即可跳转到常用目录
  • 简洁命令: 使用单字母命令(s, g, p, d, l)
  • Tab补全: 支持Tab键自动补全,提高输入效率
  • 持久化存储: 书签保存在~/.sdirs文件中,永久保存
  • 跨会话: 书签在终端会话之间持久保存
  • 轻量级: 纯Shell脚本实现,无需编译,无外部依赖

2. 🛠️ 环境准备

2.1 💻 系统要求

  • 开发环境: 💻 macOS / 🐧 Linux / 🪟 Windows (WSL)
  • Shell: 🐚 Bash 3.0+(bashmarks最低要求)
  • Python: 🐍 Python 3.x(用于构建脚本)
  • Git: 📦 Git(用于获取版本号)
  • 鸿蒙SDK: 📦 OHOS SDK (包含native工具链和hnpcli打包工具)

2.2 📥 SDK安装

  1. 📥 下载SDK
# 下载鸿蒙SDK
cd ~
wget https://cidownload.openharmony.cn/version/Master_Version/ohos-sdk-full_ohos/20250819_020817/version-Master_Version-ohos-sdk-full_ohos-20250819_020817-ohos-sdk-full_ohos.tar.gz

# 解压SDK
tar -zvxf version-Master_Version-ohos-sdk-full_ohos-20250819_020817-ohos-sdk-full_ohos.tar.gz
  1. 📁 SDK目录结构
ohos-sdk/
├── native/
│   ├── llvm/bin/          # 🔧 编译器工具链
│   ├── sysroot/           # 📚 系统根目录(头文件和库)
│   └── build-tools/       # 🛠️ 构建工具
└── toolchains/
    └── hnpcli            # 📦 HNP打包工具

2.3 🐚 Shell环境配置

bashmarks是Shell脚本,需要Bash环境支持。OpenHarmony PC默认支持Bash,无需额外配置。

什么是Shell?
Shell是用户与操作系统交互的界面。在终端中输入命令,Shell会解释并执行这些命令。常见的Shell有Bash、Zsh等。

验证Bash版本

# 在终端中输入以下命令
bash --version

# 应该看到类似这样的输出:
# GNU bash, version 5.0.17(1)-release (aarch64-unknown-linux-gnu)
# 或者
# bash version 3.0 或更高版本

如果Bash版本太低怎么办?
如果Bash版本低于3.0,bashmarks可能无法正常工作。不过OpenHarmony PC默认的Bash版本通常都满足要求。

检查当前使用的Shell

# 查看当前Shell
echo $SHELL

# 应该显示:/bin/bash 或类似路径

3. 📁 项目结构分析

3.1 📂 目录结构

bashmarks4oh/
├── Makefile              # Makefile构建脚本
├── build_ohos.sh        # OpenHarmony构建脚本
├── hnp.json             # HNP包配置
├── README.md            # 项目说明
├── LICENSE              # 许可证
├── CHANGELOG.md         # 变更日志
├── README.OPENSOURCE    # 开源说明
└── bashmarks.sh         # 主脚本文件 ⭐

3.2 🔧 Makefile关键配置

# Installation paths (can be overridden by environment variables)
PREFIX ?= /usr/local
INSTALL_DIR ?= ${PREFIX}/bin
BINARY_NAME = bashmarks.sh

all:
	@echo "bashmarks is a shell script, no compilation needed"
	@echo "Please run 'make install'"

install:
	mkdir -p $(INSTALL_DIR)
	cp bashmarks.sh $(INSTALL_DIR)/bashmarks
	chmod +x $(INSTALL_DIR)/bashmarks

clean:
	rm -f bashmarks bashmarks_*

关键配置说明

  • ⚠️ 无需编译: bashmarks是Shell脚本,无需编译
  • 📁 安装路径: 通过INSTALL_DIR环境变量指定安装目录
  • 🔧 权限设置: 使用chmod +x设置执行权限

3.3 📝 脚本功能说明

bashmarks.sh提供了以下函数(你只需要记住前5个):

用户命令(常用)

  • s <bookmark_name> - 保存当前目录为书签(Save)
  • g <bookmark_name> - 跳转到书签目录(Go)
  • p <bookmark_name> - 打印书签路径(Print)
  • d <bookmark_name> - 删除书签(Delete)
  • l - 列出所有书签(List)

内部函数(了解即可)

  • check_help - 显示帮助信息
  • _bookmark_name_valid - 验证书签名称是否合法
  • _comp / _compzsh - Tab补全支持(Bash和Zsh)
  • _purge_line - 安全删除书签(防止数据丢失)

书签存储机制

  • 📁 存储位置: 书签保存在~/.sdirs文件中(~代表你的用户主目录)
  • 📝 存储格式: 使用环境变量格式:export DIR_bookmark_name="path"
  • 🔄 路径展开: 支持$HOME变量展开(/home/user会被替换为$HOME
  • 💾 持久化: 书签永久保存,即使重启终端也不会丢失

示例:书签文件内容

# ~/.sdirs 文件内容示例
export DIR_myproject="/home/user/projects/myproject"
export DIR_notes="$HOME/Documents/notes"
export DIR_downloads="/home/user/Downloads"

4. 🔍 问题诊断与解决

4.1 🔍 问题1:Shell脚本无需编译

问题描述
bashmarks是Shell脚本,不需要编译,但构建脚本需要适配。

解决方案
build_ohos.sh中直接安装脚本,无需编译步骤:

# bashmarks是shell脚本,无需编译,直接安装
echo "Installing bashmarks..."
export INSTALL_DIR=${BASHMARKS_INSTALL_HNP_PATH}/bin
make install

4.2 🔍 问题2:脚本执行权限

问题描述
安装的脚本需要执行权限才能使用。

解决方案
在Makefile中使用chmod +x设置执行权限:

install:
	mkdir -p $(INSTALL_DIR)
	cp bashmarks.sh $(INSTALL_DIR)/bashmarks
	chmod +x $(INSTALL_DIR)/bashmarks

4.3 🔍 问题3:用户配置说明

问题描述
用户安装后需要知道如何配置bashmarks。

解决方案
在安装后显示使用说明:

echo "To use bashmarks, add the following to your ~/.bashrc or ~/.bash_profile:"
echo "  source ${BASHMARKS_INSTALL_HNP_PATH}/bin/bashmarks"

5. ✏️ 详细修改步骤

5.1 📝 步骤1:创建build_ohos.sh

创建build_ohos.sh脚本:

#!/bin/bash
# bashmarks OpenHarmony build script
# bashmarks is a shell script for saving and jumping to commonly used directories

set -e
export BASHMARKS_INSTALL_HNP_PATH=${HNP_PUBLIC_PATH}/bashmarks.org/bashmarks_0.0.1

sys_prefix=${PREFIX}
export PREFIX=${BASHMARKS_INSTALL_HNP_PATH}
echo "Installation prefix: ${PREFIX}"

# 创建安装目录
mkdir -p ${BASHMARKS_INSTALL_HNP_PATH}/bin
mkdir -p ${BASHMARKS_INSTALL_HNP_PATH}/share/man/man1

# 先清理旧的构建产物,确保干净环境
make clean || true

# bashmarks是shell脚本,无需编译,直接安装
echo "Installing bashmarks..."
export INSTALL_DIR=${BASHMARKS_INSTALL_HNP_PATH}/bin
make install

# 验证安装
if [ -f "${BASHMARKS_INSTALL_HNP_PATH}/bin/bashmarks" ]; then
    echo "bashmarks installed successfully"
    echo "Installed file:"
    ls -lh "${BASHMARKS_INSTALL_HNP_PATH}/bin/bashmarks" || true
else
    echo "Error: bashmarks not found after installation"
    exit 1
fi

# 复制 HNP 打包所需的描述文件
test -f hnp.json
cp hnp.json ${BASHMARKS_INSTALL_HNP_PATH}/

# 打包HNP和tar.gz
echo "Packing HNP package..."
pushd ${BASHMARKS_INSTALL_HNP_PATH}/../
    ${HNP_TOOL} pack -i ${BASHMARKS_INSTALL_HNP_PATH} -o ${ARCHIVE_PATH}/
    echo "Creating tar.gz archive..."
    tar -zvcf ${ARCHIVE_PATH}/ohos_bashmarks_0.0.1.tar.gz bashmarks_0.0.1/
popd

export PREFIX=${sys_prefix}

echo "Build completed successfully!"

关键步骤

  1. ✅ 创建安装目录
  2. ✅ 调用make install安装脚本
  3. ✅ 验证安装结果
  4. ✅ 打包HNP和tar.gz

5.2 📝 步骤2:创建hnp.json

创建hnp.json配置文件:

{
    "type":"hnp-config",
    "name":"bashmarks",
    "version":"0.0.1",
    "install":{}
}

5.3 📝 步骤3:更新Makefile

确保Makefile包含正确的安装目标:

install:
	mkdir -p $(INSTALL_DIR)
	cp bashmarks.sh $(INSTALL_DIR)/bashmarks
	chmod +x $(INSTALL_DIR)/bashmarks
	@echo ""
	@echo "bashmarks installed successfully to $(INSTALL_DIR)/bashmarks"
	@echo ""
	@echo "To use bashmarks, add the following to your ~/.bashrc or ~/.bash_profile:"
	@echo "  source $(INSTALL_DIR)/bashmarks"

6. ✅ 构建验证

6.1 🚀 执行构建

cd /Users/baixm/HarmonyOSPC/build
./build.sh --sdk /Users/baixm/ohos-sdk --module bashmarks4oh

6.2 ✅ 构建输出

Installing bashmarks...

mkdir -p /Users/baixm/HarmonyOSPC/data/service/hnp/bashmarks.org/bashmarks_0.0.1/bin
cp bashmarks.sh /Users/baixm/HarmonyOSPC/data/service/hnp/bashmarks.org/bashmarks_0.0.1/bin/bashmarks
chmod +x /Users/baixm/HarmonyOSPC/data/service/hnp/bashmarks.org/bashmarks_0.0.1/bin/bashmarks

bashmarks installed successfully to /Users/baixm/HarmonyOSPC/data/service/hnp/bashmarks.org/bashmarks_0.0.1/bin/bashmarks

To use bashmarks, add the following to your ~/.bashrc or ~/.bash_profile:
  source /Users/baixm/HarmonyOSPC/data/service/hnp/bashmarks.org/bashmarks_0.0.1/bin/bashmarks

USAGE:
------
s <bookmark_name> - Saves the current directory as "bookmark_name"
g <bookmark_name> - Goes (cd) to the directory associated with "bookmark_name"
p <bookmark_name> - Prints the directory associated with "bookmark_name"
d <bookmark_name> - Deletes the bookmark
l                 - Lists all available bookmarks
bashmarks installed successfully
Installed file:
-rwxr-xr-x 1 baixm staff 5.3K Dec 15 09:21 /Users/baixm/HarmonyOSPC/data/service/hnp/bashmarks.org/bashmarks_0.0.1/bin/bashmarks
Packing HNP package...
[INFO][HNP][hnp_pack.c:116]PackHnp end. srcPath=..., hnpName=bashmarks, hnpVer=0.0.1
Creating tar.gz archive...
Build completed successfully!

6.3 🔍 验证要点

  • ✅ 安装成功,无错误
  • ✅ 脚本文件权限正确(-rwxr-xr-x)
  • ✅ HNP包生成成功
  • ✅ tar.gz包生成成功

7. 💻 使用示例

7.1 🚀 基本使用(新手必读)

⚠️ 重要提示:解决"command not found"问题

问题现象

# 在OpenHarmony PC终端执行
s myproject
# 提示:bash: s: command not found

问题原因
bashmarks的sgpdl命令是Shell函数,不是独立的可执行文件。这些函数定义在bashmarks.sh脚本中,需要通过source命令加载到当前Shell环境才能使用。

解决方案(按顺序执行)

步骤1:找到bashmarks的安装路径

在OpenHarmony PC上,bashmarks可能安装在以下位置之一:

# 查找bashmarks文件
which bashmarks

# 返回结果
/data/app/base.org/base_1.0/bin/bashmarks

步骤2:临时测试(验证bashmarks是否可用)

# 假设找到的路径是 /data/service/hnp/bashmarks.org/bashmarks_0.0.1/bin/bashmarks
# 临时source一次,测试是否可用
source /data/app/base.org/base_1.0/bin/bashmarks

# 测试命令是否可用
s -h
# 如果看到帮助信息,说明bashmarks脚本正常,继续下一步
# 如果还是提示command not found,检查路径是否正确

image-20251216102035880

步骤3:永久配置(添加到.bashrc)

# 步骤3.1:编辑.bashrc文件
nano ~/.bashrc
# 或者使用vim
vim ~/.bashrc

# 步骤3.2:在文件末尾添加以下行(替换为实际找到的路径)
source /data/app/base.org/base_1.0/bin/bashmarks

# 步骤3.3:保存文件
# nano: 按Ctrl+O保存,Enter确认,Ctrl+X退出
# vim: 按Esc,输入:wq,按Enter

# 步骤3.4:重新加载配置
source ~/.bashrc

# 步骤3.5:验证配置是否生效
s -h
# 应该看到:
# s <bookmark_name> - Saves the current directory as "bookmark_name"
# g <bookmark_name> - Goes (cd) to the directory associated with "bookmark_name"
# ...

步骤4:如果.bashrc不生效,尝试.bash_profile

# 有些系统使用.bash_profile而不是.bashrc
nano ~/.bash_profile

# 添加相同的内容
source /data/app/base.org/base_1.0/bin/bashmarks

# 保存并重新加载
source ~/.bash_profile

步骤5:验证安装(重要!)

# 关闭当前终端,重新打开一个新终端窗口
# 然后执行:
s -h

# 如果看到帮助信息,说明配置成功!
# 如果还是提示command not found,继续排查:

故障排除检查清单

# ✅ 检查1:bashmarks文件是否存在
ls -la /data/app/base.org/base_1.0/bin/bashmarks
# 如果文件不存在,说明安装有问题,需要重新安装

# ✅ 检查2:bashmarks文件是否有执行权限
ls -l /data/app/base.org/base_1.0/bin/bashmarks
# 应该看到 -rwxr-xr-x,如果没有x权限,执行:
chmod +x /data/app/base.org/base_1.0/bin/bashmarks

# ✅ 检查3:.bashrc文件是否存在且包含source命令
cat ~/.bashrc | grep bashmarks
# 应该能看到 source /data/service/hnp/.../bashmarks 这一行

# ✅ 检查4:当前Shell是否是Bash
echo $SHELL
# 应该显示 /bin/bash 或类似路径

# ✅ 检查5:手动source一次,看是否有错误
source /data/app/base.org/base_1.0/bin/bashmarks
# 如果没有错误输出,说明脚本本身没问题

# ✅ 检查6:检查函数是否已加载
type s
# 应该显示:s is a function
# 如果显示:bash: type: s: not found,说明函数没有加载

如果以上步骤都无效,尝试以下方法

# 方法A:直接在终端中source(临时方案)
# 每次打开终端都需要执行一次
source /data/app/base.org/base_1.0/bin/bashmarks

# 方法B:创建别名(备选方案)
# 在.bashrc中添加:
alias bashmarks='source /data/app/base.org/base_1.0/bin/bashmarks'
# 然后每次打开终端执行:bashmarks

# 方法C:检查Termony的配置
# 如果通过Termony集成,可能需要检查Termony的启动脚本
# 参考Termony文档,确保bashmarks在Termony启动时被加载

**第一步:**参考开源鸿蒙终端工具Termony增加外部HNP包合入base.hnp的设计与实现实战教程博文内容使Termony能够在编译构建hnp包时能够同时将外部的hnp包引入到base.hnp包中。

Termony
- ...
- external-hnp

第二步:配置bashmarks(重要!)

# 编辑你的.bashrc文件(如果不存在会自动创建)
nano ~/.bashrc

# 在文件末尾添加以下一行(替换为实际路径)
source /path/to/bashmarks_0.0.1/bin/bashmarks

# 保存文件(按Ctrl+O,然后Enter,再按Ctrl+X退出)

# 重新加载配置
source ~/.bashrc

步骤3:验证安装

# 输入以下命令,如果看到帮助信息,说明安装成功
s -h

# 应该看到:
# s <bookmark_name> - Saves the current directory as "bookmark_name"
# g <bookmark_name> - Goes (cd) to the directory associated with "bookmark_name"
# ...

常见问题

  • 问题: 输入s -h提示"command not found"

    • 解决步骤
      1. 确认bashmarks文件路径:find /data/service/hnp -name "bashmarks" 2>/dev/null
      2. 手动source一次:source /path/to/bashmarks
      3. 测试:s -h(应该能看到帮助信息)
      4. 如果临时可用,添加到.bashrcecho "source /path/to/bashmarks" >> ~/.bashrc
      5. 重新加载:source ~/.bashrc
      6. 重新打开终端窗口测试
  • 问题: 不知道bashmarks安装在哪里

    • 解决: 使用以下命令查找:

      find /data/service/hnp -name "bashmarks" 2>/dev/null
      find ~/.hnp -name "bashmarks" 2>/dev/null
      ls -la /data/service/hnp/bashmarks.org/bashmarks_0.0.1/bin/ 2>/dev/null
      
  • 问题: 配置后新终端窗口还是不能用

    • 解决
      1. 检查.bashrc文件是否包含source命令:cat ~/.bashrc | grep bashmarks
      2. 检查路径是否正确:ls -la /path/to/bashmarks
      3. 检查文件权限:chmod +x /path/to/bashmarks
      4. 尝试使用.bash_profileecho "source /path/to/bashmarks" >> ~/.bash_profile
📑 保存书签(第一次使用)
# 在鸿蒙PC终端执行

# 步骤1:进入你想保存的目录
cd test

# 步骤2:使用s命令保存(s是save的缩写)
s test

# 输出:无输出,表示成功!
# 如果看到错误信息,请检查书签名称是否合法(只能包含字母、数字、下划线)

# 步骤3:验证书签是否保存成功
l  # 列出所有书签,应该能看到 myproject

# 或者
p test  # 打印书签路径,应该显示 /home/user/projects/myproject

image-20251216102253761

新手提示

  • 💡 书签名称不能包含空格和特殊字符(除了下划线_
  • 💡 书签名称区分大小写(MyProjectmyproject是不同的)
  • 💡 如果书签已存在,会被覆盖(不会报错)
🚀 跳转到书签(最常用功能)
# 在鸿蒙PC终端执行

# 步骤1:使用g命令跳转(g是go的缩写)
g test

# 输出:无输出,但当前目录已经切换到 /home/user/projects/myproject

# 步骤2:验证是否跳转成功
pwd  # 打印当前目录,应该显示 /home/user/projects/myproject

# 如果书签不存在,会看到错误提示:
# WARNING: 'myproject' bashmark does not exist

image-20251216102322951

新手提示

  • 💡 g命令会直接切换目录,就像cd命令一样
  • 💡 如果目录不存在,会提示警告但不会报错
  • 💡 可以使用Tab键自动补全书签名称(输入g my<TAB>
📋 打印书签路径
# 在鸿蒙PC终端执行
# 打印myproject书签的路径
p myproject

# 输出:
# /home/user/projects/myproject
🗑️ 删除书签
# 在鸿蒙PC终端执行
# 删除myproject书签
d myproject

# 输出:无输出,书签已删除
📊 列出所有书签
# 在鸿蒙PC终端执行
# 列出所有书签
l

# 输出示例:
# myproject         /home/user/projects/myproject
# docs              /home/user/Documents
# downloads         /home/user/Downloads

7.2 🔧 实际应用场景(新手实战)

📁 场景1:项目目录管理(最常用)

场景描述:你正在开发3个项目,经常需要在它们之间切换。

操作步骤

# 第1步:保存第一个项目
cd /home/user/projects/project1
s proj1
# 提示:使用简短的名字,输入更快

# 第2步:保存第二个项目
cd /home/user/projects/project2
s proj2

# 第3步:保存第三个项目
cd /home/user/projects/project3
s proj3

# 第4步:查看所有保存的书签
l
# 输出示例:
# proj1    /home/user/projects/project1
# proj2    /home/user/projects/project2
# proj3    /home/user/projects/project3

# 第5步:快速切换项目(这才是bashmarks的威力!)
g proj1  # 瞬间切换到project1,不用输入长路径!
g proj2  # 瞬间切换到project2
g proj3  # 瞬间切换到project3

对比传统方式

# 传统方式(每次都要输入完整路径)
cd /home/user/projects/project1/src/main/java/com/example
# 太长了!容易出错!

# 使用bashmarks(只需输入书签名)
g proj1
# 简单!快速!不会出错!

新手练习

  1. 创建3个测试目录:mkdir -p ~/test/{proj1,proj2,proj3}
  2. 分别保存为书签:cd ~/test/proj1 && s p1(使用更短的名字)
  3. 尝试快速切换:g p1g p2g p3
  4. 查看所有书签:l
📚 场景2:文档目录管理

场景描述:你有很多文档分散在不同目录,想快速访问。

操作步骤

# 保存文档目录
cd /home/user/Documents/notes
s notes

cd /home/user/Documents/books
s books

cd /home/user/Documents/reports/2025
s reports2025  # 使用描述性名称

# 快速访问文档
g notes        # 切换到notes目录
g books        # 切换到books目录
g reports2025  # 切换到2025年报告目录

# 查看所有文档相关的书签
l | grep -E "notes|books|reports"

新手提示

  • 💡 使用有意义的书签名称,比如notesbooks,而不是nb
  • 💡 可以包含年份等信息,如reports2025
  • 💡 使用l命令查看所有书签,方便记忆
🔧 开发环境目录管理
# 保存开发环境目录
cd /opt/development/tools
s tools

cd /opt/development/configs
s configs

# 快速访问开发环境
g tools    # 切换到tools目录
g configs  # 切换到configs目录

7.3 ⌨️ Tab补全功能(提高效率的秘诀)

什么是Tab补全?
Tab补全是一个非常有用的功能:输入部分内容后按Tab键,系统会自动补全剩余部分。bashmarks支持Tab补全书签名称,让你输入更快、更准确!

使用方法

# 步骤1:输入命令和部分书签名
g my

# 步骤2:按Tab键(不要按Enter!)
# 如果只有一个匹配的书签,会自动补全:
g myproject

# 如果有多个匹配的书签,按两次Tab会显示所有选项:
g my<TAB><TAB>
# 显示:
# myproject  myproject2  mynotes

# 步骤3:继续输入更多字符,再按Tab
g myp<TAB>  # 自动补全为 g myproject

支持的命令

# g命令支持Tab补全
g my<TAB>  # 自动补全为 g myproject

# p命令支持Tab补全
p my<TAB>  # 自动补全为 p myproject

# d命令支持Tab补全
d my<TAB>  # 自动补全为 d myproject

# s命令不支持Tab补全(因为要保存新书签)

新手提示

  • 💡 Tab补全可以大大减少输入错误
  • 💡 如果Tab补全不工作,检查是否已经source了bashmarks脚本
  • 💡 按两次Tab可以查看所有匹配的书签

7.4 📝 配置文件设置(重要!必须配置)

为什么需要配置?
bashmarks定义的是Shell函数,需要通过source命令加载到当前Shell环境中才能使用。如果不配置,每次打开新终端都要手动source,很麻烦。

配置方法(选择一种即可)

方法1:添加到.bashrc(推荐)
# 步骤1:打开.bashrc文件(如果不存在会自动创建)
nano ~/.bashrc
# 或者使用vim
vim ~/.bashrc

# 步骤2:在文件末尾添加以下行(替换为实际路径)
source /path/to/bashmarks_0.0.1/bin/bashmarks

# 步骤3:保存文件
# nano: 按Ctrl+O保存,Enter确认,Ctrl+X退出
# vim: 按Esc,输入:wq,按Enter

# 步骤4:重新加载配置
source ~/.bashrc

# 步骤5:验证配置是否生效
s -h  # 如果看到帮助信息,说明配置成功!
方法2:添加到.bash_profile
# 步骤1:打开.bash_profile文件
nano ~/.bash_profile

# 步骤2:在文件末尾添加以下行
source /path/to/bashmarks_0.0.1/bin/bashmarks

# 步骤3:保存并重新加载
source ~/.bash_profile

如何找到bashmarks的安装路径?

# 方法1:使用find命令查找
find ~ -name "bashmarks" 2>/dev/null

# 方法2:如果使用HNP安装,通常在:
# /home/user/.hnp/bashmarks.org/bashmarks_0.0.1/bin/bashmarks

# 方法3:查看HNP安装信息
hnp list | grep bashmarks

常见问题

  • 问题: 配置后新终端窗口还是不能用
    • 解决: 检查路径是否正确,确保bashmarks文件存在
  • 问题: 不知道用.bashrc还是.bash_profile
    • 解决: 通常使用.bashrc即可,如果.bashrc不生效,再试试.bash_profile
  • 问题: 配置后提示"Permission denied"
    • 解决: 检查bashmarks文件是否有执行权限:chmod +x /path/to/bashmarks

7.5 ❓ 显示帮助信息

# 在鸿蒙PC终端执行
# 任何命令都可以使用-h, -help, 或--help查看帮助
s -h
g -h
p -h
d -h
l -h

# 输出示例:
# s <bookmark_name> - Saves the current directory as "bookmark_name"
# g <bookmark_name> - Goes (cd) to the directory associated with "bookmark_name"
# p <bookmark_name> - Prints the directory associated with "bookmark_name"
# d <bookmark_name> - Deletes the bookmark
# l                 - Lists all available bookmarks

image-20251216102419710

7.6 💡 高级用法

在脚本中使用
#!/bin/bash
# 在脚本中使用bashmarks

# source bashmarks
source /path/to/bashmarks_0.0.1/bin/bashmarks

# 跳转到书签目录
g myproject

# 执行操作
ls -la
git status

# 返回原目录
cd -
组合使用多个命令
# 保存当前目录并跳转到另一个书签
cd /home/user/projects/newproject
s newproject
g myproject  # 跳转到另一个项目

# 打印书签路径并在其中执行命令
cd $(p myproject)
ls -la

8. 📚 总结与最佳实践

8.1 ✅ 适配总结

本次适配成功实现了bashmarks工具在OpenHarmony PC平台上的部署:

  1. Shell脚本适配: bashmarks是纯Shell脚本,无需编译,直接安装
  2. Makefile配置: 使用Makefile管理安装过程
  3. 构建脚本优化: build_ohos.sh脚本添加了安装和验证步骤
  4. HNP打包: 成功生成HNP格式的安装包和tar.gz发布包
  5. 功能验证: 脚本功能完整,支持保存、跳转、打印、删除、列出等操作

8.2 🎯 关键技术点

  1. Shell脚本: bashmarks是纯Shell脚本,无需编译
  2. 权限设置: 使用chmod +x设置执行权限
  3. 用户配置: 需要用户手动source脚本到.bashrc或.bash_profile
  4. 书签存储: 书签保存在~/.sdirs文件中
  5. Tab补全: 支持Bash和Zsh的Tab补全功能

8.3 💡 最佳实践

  1. 安装配置:

    • ✅ 将bashmarks添加到.bashrc或.bash_profile
    • ✅ 使用绝对路径source脚本
    • ✅ 验证脚本是否加载成功
  2. 书签命名:

    • ✅ 使用有意义的书签名称
    • ✅ 避免使用特殊字符(只支持字母、数字、下划线)
    • ✅ 使用简短但描述性的名称
  3. 日常使用:

    • ✅ 为常用项目目录创建书签
    • ✅ 定期清理不需要的书签
    • ✅ 使用Tab补全提高效率

8.4 🚀 未来改进方向

  1. 功能增强:

    • 📊 支持书签分类和标签
    • 🔄 支持书签导入导出
    • 📈 支持书签搜索功能
    • 🔍 支持书签描述信息
  2. 用户体验:

    • ⚡ 改进错误提示信息
    • 🎯 支持书签重命名
    • 📝 支持书签注释
  3. 文档完善:

    • 📖 添加更多使用示例
    • 🔍 添加故障排除指南
    • 📚 添加高级用法文档

📚 附录

A. 相关资源

  • bashmarks文档: https://github.com/huyng/bashmarks
  • GitHub仓库: https://github.com/huyng/bashmarks
  • Shell脚本教程: https://www.gnu.org/software/bash/manual/
  • OpenHarmony官网: https://www.openharmony.cn/

B. 常见问题(新手必读)

Q1: bashmarks是什么?为什么要用它?

A: bashmarks是一个Shell脚本工具,用于保存和快速跳转到常用目录。想象一下,你每天都要访问/home/user/projects/myproject/src/main/java/com/example这个目录,每次都要输入这么长的路径很麻烦。使用bashmarks,你只需要:

cd /home/user/projects/myproject/src/main/java/com/example
s myproject  # 保存为书签
# 以后只需要:
g myproject  # 瞬间跳转!

Q2: 如何安装bashmarks?

A: 安装分为两步:

  1. 安装文件:使用HNP包或解压tar.gz包
  2. 配置环境:将bashmarks添加到.bashrc文件中:
# 编辑.bashrc
nano ~/.bashrc

# 添加这一行(替换为实际路径)
source /path/to/bashmarks_0.0.1/bin/bashmarks

# 保存并重新加载
source ~/.bashrc

Q3: 书签保存在哪里?会丢失吗?

A: 书签保存在~/.sdirs文件中(~代表你的用户主目录)。这个文件是隐藏文件(以.开头),使用ls -a可以看到。书签是永久保存的,即使重启终端或重启电脑也不会丢失。

Q4: 支持哪些Shell?

A: bashmarks支持Bash和Zsh,都支持Tab补全功能。OpenHarmony PC默认使用Bash,完全支持。

Q5: 如何删除所有书签?

A: 有两种方法:

# 方法1:使用d命令逐个删除
d bookmark1
d bookmark2
# ...

# 方法2:直接编辑书签文件(高级用户)
nano ~/.sdirs
# 删除所有内容,保存即可

Q6: 书签名称有什么限制?

A: 书签名称只能包含:

  • ✅ 字母(a-z, A-Z)
  • ✅ 数字(0-9)
  • ✅ 下划线(_)

不能包含:

  • ❌ 空格
  • ❌ 特殊字符(如-./等)
  • ❌ 中文字符

Q7: 如何在脚本中使用bashmarks?

A: 在脚本开头source bashmarks脚本:

#!/bin/bash
# 加载bashmarks
source /path/to/bashmarks_0.0.1/bin/bashmarks

# 现在可以使用bashmarks命令了
g myproject
ls -la

Q8: Tab补全不工作怎么办?

A: 检查以下几点:

  1. 确保已经source了bashmarks脚本(这是最常见的原因)
  2. 确保使用的是Bash或Zsh(不是sh)
  3. 重新打开终端窗口试试
  4. 检查Shell版本:bash --version(需要3.0+)

Q14: 执行s等命令时提示"command not found"怎么办?

A: 这是最常见的问题!原因是bashmarks的函数没有被加载到Shell环境中。按以下步骤解决:

步骤1:找到bashmarks安装路径

find /data/service/hnp -name "bashmarks" 2>/dev/null
# 或者
ls -la /data/service/hnp/bashmarks.org/bashmarks_0.0.1/bin/bashmarks

步骤2:临时测试

# 假设路径是 /data/service/hnp/bashmarks.org/bashmarks_0.0.1/bin/bashmarks
source /data/service/hnp/bashmarks.org/bashmarks_0.0.1/bin/bashmarks
s -h  # 测试是否可用

步骤3:永久配置

# 添加到.bashrc
echo "source /data/service/hnp/bashmarks.org/bashmarks_0.0.1/bin/bashmarks" >> ~/.bashrc
source ~/.bashrc

# 或者添加到.bash_profile(如果.bashrc不生效)
echo "source /data/service/hnp/bashmarks.org/bashmarks_0.0.1/bin/bashmarks" >> ~/.bash_profile
source ~/.bash_profile

步骤4:验证

# 关闭终端,重新打开
s -h  # 应该能看到帮助信息

如果还是不行,检查

  • bashmarks文件是否存在:ls -la /path/to/bashmarks
  • 文件是否有执行权限:chmod +x /path/to/bashmarks
  • .bashrc是否包含source命令:cat ~/.bashrc | grep bashmarks
  • 当前Shell类型:echo $SHELL(应该是/bin/bash)

Q9: 输入s myproject后没有反应,是成功了吗?

A: 是的!bashmarks命令成功时通常没有输出(这是Unix/Linux的惯例)。你可以用以下命令验证:

l              # 列出所有书签,应该能看到myproject
p myproject    # 打印路径,应该显示你保存的目录

Q10: 书签名称区分大小写吗?

A: 是的!MyProjectmyproject是不同的书签。建议统一使用小写,避免混淆。

Q11: 可以给同一个目录保存多个书签吗?

A: 可以!比如:

cd /home/user/projects/myproject
s myproject
s proj
s mp
# 现在可以用 g myproject、g proj、g mp 都跳转到同一个目录

Q12: 如何查看书签文件的内容?

A: 使用以下命令:

# 查看书签文件内容
cat ~/.sdirs

# 或者使用编辑器查看
nano ~/.sdirs

Q13: 书签文件损坏了怎么办?

A: 如果书签文件损坏,可以:

  1. 备份原文件:cp ~/.sdirs ~/.sdirs.backup
  2. 删除损坏的文件:rm ~/.sdirs
  3. bashmarks会自动创建新的空文件
  4. 重新保存书签即可

🎉 结语

bashmarks工具为终端用户提供了便捷的目录书签管理能力,是提高终端操作效率的重要工具。通过本次适配,bashmarks成功运行在OpenHarmony PC平台上,为鸿蒙生态的开发者提供了强大的目录导航功能。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐