You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash 3脚本自定义提示符:合并历史记录与自动补全求助

整合Bash 3自定义提示符的自动补全与历史记录功能

以下是适配Bash 3、支持Ubuntu/macOS的整合版代码,同时解决了你原代码中的笔误问题:

#!/bin/bash
# 兼容Bash 3,支持Ubuntu/macOS

# 定义合法命令列表
readonly VALID_COMMANDS=(car dog dollars quit)

# 自定义自动补全函数:生成匹配当前输入的命令候选
_custom_completion() {
    local cur="${COMP_WORDS[COMP_CWORD]}"
    COMPREPLY=($(compgen -W "${VALID_COMMANDS[*]}" -- "$cur"))
}

# 将补全函数绑定到虚拟触发命令(用于触发Bash补全机制)
complete -F _custom_completion mycli

# 带历史记录和补全的输入处理函数
prompt_input() {
    local input
    while true; do
        # 重置补全状态,确保每次输入的补全新鲜
        COMP_LINE=""
        COMP_POINT=0
        # 启用readline支持(方向键调历史、Tab补全),自定义提示符
        if IFS= read -er -p "t!care>> " input; then
            # 将输入添加到会话历史
            history -s "$input"
            echo "$input"
            return 0
        else
            # 处理Ctrl+D退出
            echo ""
            exit 0
        fi
    done
}

# 主交互循环
while true; do
    echo "Menu:"
    echo "1. car"
    echo "2. dog"
    echo "3. dollars"
    echo "4. Quit"

    input=$(prompt_input)

    case "$input" in
        car)
            echo "You have selected car."
            ;;
        dog)
            echo "You have selected dog."
            ;;
        dollars)
            echo "You have selected dollars."
            ;;
        quit)
            echo "You have selected quit"
            exit 0
            ;;
        *)
            echo "Error command"
            ;;
    esac
done

关键功能说明

  1. 自动补全实现

    • 用complete -F将自定义补全函数绑定到虚拟命令mycli,借助Bash原生补全机制触发候选建议
    • compgen -W根据合法命令列表生成匹配当前输入的补全选项,完美适配Bash 3
    • read -e启用readline,按下Tab键即可触发补全
  2. 历史记录实现

    • read -e自带readline历史支持,上下方向键可直接调取会话内的历史输入
    • history -s "$input"将每次输入的命令追加到会话历史,确保后续能调取
    • 若需要持久化历史(关闭终端后仍保留),可在脚本开头添加HISTFILE="$HOME/.mycli_history",并在history -s后追加history -a,脚本启动时添加history -r读取历史文件
  3. 跨系统兼容性

    • 所有语法均兼容Bash 3(macOS默认Bash版本)和更高版本(Ubuntu默认版本)
    • 未使用系统特定的非标准命令,确保跨Unix环境运行正常

内容的提问来源于stack exchange,提问作者Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:00:42