1

Фоновый контекст: я хочу, чтобы команда 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"

1 ответ1

0

Что произойдет, если вы попробуете:

complete | grep ssh

запись появляется?

Я бы порекомендовал установить пакет завершения bash .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .