Фоновый контекст: я хочу, чтобы команда ssh на терминале OS X отображала имена хостов, которые я часто использую. В 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 -W foo.com ssh; complete -W bar.com ssh
И действует только последний (каждый заменяет предыдущий). Итак, мне нужно собрать их все в одну команду, а именно:
complete -W 'foo bar' ssh
Так что этот вопрос не о ~/.bash_profile, а о понимании правильного способа использования "complete"