我创建了一些 bash 完成函数,它们似乎都可以单独工作,但是当我尝试使用它们进行制表完成时,会出现意想不到的结果。
是否可以连接 bashdb,然后尝试按 Tab 键完成某些操作并逐步调试并确定出了什么问题?
答案1
set -x
如果您set -x
处于交互式会话或自动完成脚本本身中,(几乎?)每个命令及其结果都将被打印出来。这包括在自动完成脚本中完成的工作。
然后可以使用 将其再次平静下来set +x
。
-X
扩展每个简单命令、for 命令、case 命令、select 命令或算术 for 命令后,显示 PS4 的扩展值,后跟命令及其扩展参数或关联的单词列表。
答案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,但感觉没必要……