ssh -X - отключает пункты меню

Когда вызывается getopt , он отслеживает обработанные параметры с помощью переменной OPTIND .

Попробуйте следующее:

#!/bin/bash

f () {
    printf "Intro OPTIND: %d\n" "$OPTIND"
    while getopts ":a:b:" opt; do
        printf "Current OPTIND: %d\n" "$OPTIND"
        case $opt in
            a)
                echo "-a was triggered, Parameter: $OPTARG" >&2
                ;;
            b)
                echo "-b was triggered, Parameter: $OPTARG" >&2
                ;;
        esac
    done
    printf "Exit OPTIND: %d\n" "$OPTIND"
}

echo "Run #1"
f "$@"
echo "Run #2"
f "$@"

Выход:

./test -a foo -b bar
Run #1
Intro OPTIND: 1
Current OPTIND: 3
-a was triggered, Parameter: foo
Current OPTIND: 5
-b was triggered, Parameter: bar
Exit OPTIND: 5
Run #2
Intro OPTIND: 5
Exit OPTIND: 5

Таким образом, вы можете сделать что-то вроде:

OPTIND=1

в начале функции. Или, в зависимости от ситуации, что обычно лучше:

local OPTIND

Если OPTIND не использовался, поскольку функция реализована, цикл while продолжался бы вечно. Его также можно использовать для возобновления обработки аргументов, после сбоя или чего-либо еще, вызвать другую функцию, если x или y, и она возобновит работу с того места, где было остановлено ранее и т. Д.

1
11.12.2017, 20:33
0 ответов

Теги

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