为带argcomplete的Python脚本配置Bash别名补全
为Python脚本别名配置自动补全
问题背景
我在根目录下source以下bash脚本:
ROOT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" eval "$(register-python-argcomplete ${ROOT_DIR}/bin/execute.py)"
其中execute.py已启用Python自动补全,使用完整路径调用时Tab补全功能正常:
/absolute/path/to/root/bin/execute.py <Tab> # 此操作完全正常
我希望创建别名my_command,无需输入完整路径即可调用脚本,同时保留Tab补全功能:
my_command <Tab>
尝试过两种方式,但均无法实现补全:
- 普通bash别名:
alias my_command="${ROOT_DIR}/bin/execute.py"
- 函数形式封装:
my_command() { ${ROOT_DIR}/bin/execute.py "$@" }
请问如何无需编写单独的bash补全脚本实现该需求?
可行解决方案
步骤1:查看现有补全规则
在bash中执行以下命令,获取目标Python脚本对应的补全配置:
complete | grep _python_argcomplete
会得到类似如下的输出,其中包含execute.py的补全规则:
complete -o bashdefault -o default -o nospace -F _python_argcomplete /absolute/path/to/root/bin/execute.py
步骤2:修改bash脚本
将原脚本修改为以下内容,即可为别名my_command配置自动补全:
ROOT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" _my_command_autocomplete() { _python_argcomplete ${ROOT_DIR}/bin/execute.py } my_command() { ${ROOT_DIR}/bin/execute.py "$@" } eval "$(register-python-argcomplete ${ROOT_DIR}/bin/execute.py)" complete -F _my_command_autocomplete my_command
内容的提问来源于stack exchange,提问作者NiklasMan
相关产品推荐
相关产品推荐

