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"