背景情况:我希望 OS X 终端上的 ssh 命令能够用制表符补全我经常使用的主机名。在 Ubuntu 上,ssh 似乎足够智能,能够用制表符补全我 ~/.ssh/config 文件中的任何主机名。但 OS X 似乎没有这种行为,所以我试图手动强制对我经常使用的某些主机进行制表符补全。
如果我打开一个终端并运行这个:
$ complete -W foo.com ssh
然后输入ssh f<tab>
将完成ssh foo.com
问题:当我将这样的命令放入我的 ~/.bash_profile 中时,它不再起作用。为什么?
我确信 ~/.bash_profile 正在执行,因为其中还有其他内容(提示配置等)正在我的终端会话中生效。
将内容放入我的 ~/.bash_profile 中难道不应该等同于在会话启动时在终端中自动执行这些命令吗?就好像命令在complete
丢失的上下文中运行,而其他内容仍然存在(例如我的 PS1 提示设置)。
谢谢您的见解,bash 专家!
更新
使用 complete 列出我的配置,我发现了我的错误。我使用了多个语句,例如:
complete -W foo.com ssh; complete -W bar.com ssh
并且只有最后一个才会生效(每个都会替换它之前的那个)。因此,我需要将它们全部放在一个命令中,即:
complete -W 'foo bar' ssh
所以这个问题不是关于~/.bash_profile,而是关于理解正确使用“complete”的方法