如何调试 bash 补全?

如何调试 bash 补全?

我创建了一些 bash 完成函数,它们似乎都可以单独工作,但是当我尝试使用它们进行制表完成时,会出现意想不到的结果。

是否可以连接 bashdb,然后尝试按 Tab 键完成某些操作并逐步调试并确定出了什么问题?

答案1

set -x

如果您set -x处于交互式会话或自动完成脚本本身中,(几乎?)每个命令及其结果都将被打印出来。这包括在自动完成脚本中完成的工作。

然后可以使用 将其再次平静下来set +x

-X

扩展每个简单命令、for 命令、case 命令、select 命令或算术 for 命令后,显示 PS4 的扩展值,后跟命令及其扩展参数或关联的单词列表。

-从Bash 手册 #内置 Set

答案2

我使用这个简单的功能将我需要的所有内容重定向到文件。

function debug_me {
    echo $@
    echo "COMP_CWORD:" $COMP_CWORD
    echo "COMP_POINT:" $COMP_POINT
    echo "COMP_LINE:" $COMP_LINE
    echo "COMP_LINE#:" ${#COMP_LINE}
    echo "COMP_KEY:" $COMP_KEY
    echo "COMP_WORDS:" ${COMP_WORDS[@]}
    echo "COMPREPLY:" ${COMPREPLY[@]}
    echo
} >> ~/com.debug

并将其称为: debug_me $someadditional_variable "If should be true here"

答案3

只需从 bash 完成函数记录/输出;由于它们很可能不是火箭科学,因此这应该相当容易做到。也许可以连接 bashdb,但感觉没必要……

相关内容