Minha função bash é executada apenas uma vez por terminal aberto

6

Quando tento executar minha função bash, definida no .bashrc, pela segunda vez no mesmo terminal, ela não funciona.

O código é o seguinte:

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
}

Eu corro isto:

nos -c

vai para ~ / mydirectory

ok, funcionou.

mas então eu faço isso:

cd ~
nos -c

e nada acontece.

    
por rafael.js 22.09.2012 / 23:49

1 resposta

7

O getopts builtin rastreia até que ponto ele passou pelas opções através da variável OPTIND . Na segunda vez que você executar a função, $OPTIND reteve seu valor da chamada anterior, portanto, o shell pensa que já terminou o processamento das opções. Consulte a descrição de getopts no manual para obter mais informações.

Declare OPTIND e OPTARG como locais para a função.

Existe outro erro na sua função, que é o ~ não expandido entre aspas duplas. Faça com que local cdir=~/mydirectory ou local cdir="$HOME/mydirectory"

    
por Gilles 23.09.2012 / 00:23