Завершение Smart Bash В зависимости от позиции «Аргумент»

У меня есть простая функция bash, в основном оболочка вокруг scp. Вызывается с использованием

copytomachine <Machine> <File> 

Я создал несколько простых авто, таких, что когда я печатаю

 copytomachine <TAB><TAB> 

Он представляет мне список доступных машин, просто жестко закодированную последовательность в настоящее время, что отлично подходит для моих нужд.

Если, однако, я напечатаю

 copytomachine BUILD_SERVER <TAB><TAB> 

Я бы хотел, чтобы он предложил мне список файлов в моем каталоге и смог автозаполнять их пути и т. Д. Однако я не хочу, чтобы этот список файлов был представлен мне для первого параметра (имя машины).

Мой текущий скрипт завершения выглядит так:

 _machines_completions() { local opts opts="BUILD_SERVER TEST_SERVER LOCAL_MACHINE" COMPREPLY=( $(compgen -W "${opts}" -- ${COMP_WORDS[COMP_CWORD]}) ) return 0 } 

Может ли кто-нибудь сообщить, как я могу изменить это, чтобы позволить мне заполнить вкладку для этих определенных имен машин для параметра 1 и заполнить вкладку для имен файлов по параметру 2?

  • Как перенаправить вывод завершения команды?
  • FreeBSD csh, TAB, чтобы показать доступные варианты?
  • Почему никто не использует позиционные аргументы, доступные для функций завершения Bash?
  • Как я могу программно получить доступ к завершению zsh?
  • zsh: использовать setopt AUTO_MENU условно, в зависимости от $ PWD
  • Объяснение завершения имени файла Bash
  • исключить конкретный файл из bash_completion
  • принудительная загрузка функции завершения для zsh (без принудительного ее выполнения путем нажатия на вкладку)
  • One Solution collect form web for “Завершение Smart Bash В зависимости от позиции «Аргумент»”

    Поскольку COMP_CWORD – это номер слова, вы можете проверить его значение:

     _machines_completions() { local opts opts="BUILD_SERVER TEST_SERVER LOCAL_MACHINE" case $COMP_CWORD in 1) COMPREPLY=( $(compgen -W "${opts}" -- "${COMP_WORDS[COMP_CWORD]}") ) ;; 2) COMPREPLY=( $(compgen -o default -- "${COMP_WORDS[COMP_CWORD]}") ) ;; esac return 0 } 

    -o default :

    Использовать полное имя файла Readline по умолчанию, если compspec не дает совпадений.

    Interesting Posts

    Мониторинг с использованием rsyslog

    Изменение размера окна Xterm убивает Django

    Как запустить команду каждые 5 секунд на Solaris?

    Рабочая среда рабочего стола, которая может привязывать рабочее пространство к внешнему монитору

    Linux-PAM не может использовать пользовательский модуль PAM – возможно, связанный с многоархивным

    Зачем нам нужен драйвер usbkbd, когда есть usbhid?

    shell-скрипт для имени файла chmod, но только для новых файлов с момента последнего запуска скрипта

    Как вы помните параметры команды?

    Как контролировать все исполнения исполняемого файла за определенный период времени

    Загрузить и проверить цепочку сертификатов

    Любой способ кодирования url в команде curl?

    Как загрузить установочный носитель Arch Linux с включенной защищенной загрузкой?

    Как проверить, какие строки из файла A отсутствуют в файле B, не отображая ничего, что присутствует в файле B, а не в файле A?

    Начало работы с «человеком»: несколько вопросов

    Параметры экрана режима mplayer

    Linux и Unix - лучшая ОС в мире.