Моя функция bash запускается только один раз для каждого открытого терминала

Когда я пытаюсь запустить мою функцию bash, определенную в .bashrc, во второй раз в том же терминале, она не работает.

Код следующий:

function nos (){
    local option
        while getopts cs option
            do
            case $option in
                s)
                    #start my server
                ;;
                c)
                    local cdir="~/mydirectory"
                    local cdir_arg=""
                    case $OPTARG in
                        p)
                            local cdir_arg="anotherdirectory"
                        ;;
                    esac
                    local cdir="${cdir}${cdir_arg}"
                    cd $cdir
                    ;;
                *)
                    echo 'This function doesnt have Super Cow Powers'
                    return 1
                ;;
            esac
    done
}

Я запускаю это:

nos -c

он идет в ~ / mydirectory

ок, сработало.

но потом я делаю это:

cd ~
nos -c

и ничего не происходит.

6
задан 23 September 2012 в 01:49

1 ответ

Встроенная функция getopts отслеживает, как далеко она прошла через опции через переменную OPTIND. Во второй раз, когда вы запускаете функцию, $OPTIND сохраняет свое значение из предыдущего вызова, поэтому оболочка считает, что она уже завершила обработку параметров. См. Описание getopts в руководстве для получения дополнительной информации.

Объявите OPTIND и OPTARG как локальные для функции.

В вашей функции есть еще одна ошибка, заключающаяся в том, что ~ не раскрывается между двойными кавычками. Сделайте это local cdir=~/mydirectory или local cdir="$HOME/mydirectory"

0
ответ дан 23 September 2012 в 01:49

Другие вопросы по тегам:

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