【问题标题】:Pressing <tab> after typing 'export VARIABLE=~/' clobbers the 'VARIABLE='在输入 'export VARIABLE=~/' 后按 <tab> 会破坏 'VARIABLE='
【发布时间】:2015-06-15 23:28:06
【问题描述】:

我在 bash 中遇到以下我觉得很烦人的行为:

  1. 输入export VARIABLE=~/
  2. 现在我想自动完成路径的下一段,所以我按&lt;tab&gt;
  3. Bash 破坏了 VARIABLE=,只留下了 export ~/

为什么会这样?

我的bash版本是4.3.33,操作系统是Debian testing,终端是Konsole。

【问题讨论】:

  • 您是否启用了任何自定义的 bash 完成支持?你使用的是什么版本的 bash-completion 包?
  • 我的 bash 完成包是 1:2.1-4.1。如何判断我是否有自定义完成支持?
  • 我无法在我的环境中重现您的问题。
  • 在我的 debian 不稳定系统上使用相同版本的 bash 和 bash-completion 包,我也无法重现此问题。如果您运行exec 9&gt;/tmp/trace.out; BASH_XTRACEFD=9; set -x; export VARIABLE=~/&lt;tab&gt;; set +x; unset -v BASH_XTRACEFD,您会在/tmp/trace.out 文件中看到什么?
  • @EtanReisner:没错。在我的系统上,/etc/bash_completion.d/npm(来自nodejs 包)正在删除“=”。非常粗鲁,就是这样。我应该更仔细地查看 bash 源代码;我只检查了明显的启动文件。 (默认值在bashline.c,变量bash_completer_word_break_characters。)

标签: bash tab-completion


【解决方案1】:

验证$COMP_WORDBREAKS 是否包含=。如果没有,试试这个:

COMP_WORDBREAKS+==

如果之后export 完成工作令您满意,那么您需要弄清楚COMP_WORDBREAKS 正在更改的启动文件。

例如,如果您已安装 node.js,则 npm 完成脚本(在 /etc/bash_completions.d/npm 中会从 COMP_WORDBREAKS 中删除 =@

许多完成脚本,有点烦人,会更改全局设置。 (例如,标准 Debian/Ubuntu 完成脚本启用 extglob shell 选项。)

【讨论】:

  • 您在所有方面都是对的:我的COMP_WORDBREAKS 中没有=,是npm 正在删除它,然后重新添加它解决了问题。非常感谢!你知道npm删除它的目的是什么吗?
  • @highcommander4:我不知道为什么 npm 会那样做。除非您是 npm 及其补全的忠实粉丝,否则我建议您只删除补全目录中的 npm 文件。或者编辑它并删除更改 BASH_WORDBREAKS 的行。
猜你喜欢
  • 2011-03-09
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
  • 2022-08-17
  • 2013-07-22
  • 1970-01-01
相关资源
最近更新 更多