如何在 bash 命令行上恢复 shell 变量的制表符补全?

如何在 bash 命令行上恢复 shell 变量的制表符补全?

我早已将我最近访问的目录设置为 shell 变量 d1、d2 等。

在一台古老的 Fedora 机器上,我可以输入如下命令

$cp$d1/

并且 shell 会将 $d1 替换为类似 /home/acctname/projects/blog/ 的文本,然后向我显示 .../blog 的内容,就像您期望任何制表符补全所做的那样。

现在,ubuntu wheezy/sid 和 fedora 16 都只是对“$”进行了 \-escape,并且自然没有任何补全可显示。

您可以在 OSX 终端窗口中看到此行为。在 10.8 上,执行以下操作

ls $HOME/ 看看我的意思。

是否有一个 bash shell 变量或选项可以恢复旧行为?

man bash表明这是一个错误:

   complete (TAB)
          Attempt  to  perform  completion  on  the  text  before  point.  Bash
          attempts completion treating the text as  a  variable  (if  the  text
          begins  with  $),  username (if the text begins with ~), hostname (if
          the text begins with @), or command (including aliases and functions)
          in  turn.   If none of these produces a match, filename completion is
          attempted.

当标记以“~”或字母开头时,我会得到上述完成。只是“$”完成有问题。

答案1

从 bash 4.2 开始,此行为受以下规则约束:

shopt -s direxpand # enable
shopt -u direxpand # disable

http://www.mail-archive.com/[电子邮件保护]/msg11251.html了解背景信息。

答案2

不太确定您是在询问 Mac 的解决方案还是 *nix 的解决方案。如果您询问的是更换 Mac 的问题,我刚刚浏览过这个简单教程将我的 OSX bash 从

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.

GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin15.0.0)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

相关内容