Используя getopts для парсинга опций после аргумента неопции

-temacs-copy не опечатка. Ведущий тире означает, что это - опция к bind-keys команда (наряду с аргументом в пользу опции). Это эквивалентно -t emacs-copy, если Вам нравится этот лучше.

Режим копии использует другой набор привязки и commands1, чем “нормальный режим”. copy-pipe команда только доступна в альтернативных таблицах привязки “режима”. Когда mode-keys emacs, режим копии будет использовать emacs-copy таблица, таким образом, необходимо связать M-w с copy-pipe в той таблице.

bind-key -temacs-copy M-w copy-pipe "xclip -i -selection clipboard"

Будьте тщательным созданием слишком многих “никаких префиксов” привязка. Они будут мешать вводить те связанные ключи к программе, работающей внутри tmux (например, когда Вы захотите ввести C-y к экземпляру tty-режима Emacs, работающего внутри tmux). Можно всегда (снабжать префиксом), связывают некоторый ключ, который делает send-keys C-y, но это могло бы сделать это более громоздким, чтобы ввести при необходимости в нем достаточно часто.


1 Только перемещение и редактирующие команды доступны. За исключением copy-pipe, эти команды не берут аргументов (это - то, что страница справочника означает с ним, говорит, что “Одна команда в принимает аргумент”; “в”, вероятно, опечатка или ошибка редактирования).

10
05.07.2014, 14:30
1 ответ

getopts начинает синтаксический разбор с первого аргумента и останавливается на первом аргументе без опции. Это стандартное соглашение - некоторые GNU утилиты принимают опции после аргументов, но нормально то, что в somecommand foo -bar qux, -bar не обрабатывается как опция.

Если вы хотите начать разбор опций после bootstrap, вы должны указать это. getts использует переменную OPTIND, чтобы запомнить, в какой позиции она находится. OPTIND начинается со значения 1. Чтобы пропустить первый аргумент, установите его значение 2.

case "$1" in
   bootstrap)
      OPTIND=2
      while getopts ":b:" o; do
          …

В качестве альтернативы можно сдвинуть аргументы, которые вы уже обработали.

subcommand=$1; shift
case "$subcommand" in
    bootstrap)
      while getopts ":b:" o; do
          …
12
27.01.2020, 20:02

Теги

Похожие вопросы