我的 bash 函数在每个打开的终端上只运行一次

我的 bash 函数在每个打开的终端上只运行一次

当我尝试在同一个终端中第二次运行在 .bashrc 中定义的 bash 函数时,它不起作用。

代码如下:

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

什么也没有发生。

答案1

内置函数getopts会跟踪它通过变量处理选项的程度OPTIND。第二次运行该函数时,它$OPTIND保留了上次调用的值,因此 shell 认为它已经完成了选项的处理。请参阅getopts请参阅手册以获取更多信息。

OPTIND将和声明OPTARG为函数的局部。

您的函数中还有另一个错误,即~未在双引号之间展开。请将其local cdir=~/mydirectorylocal cdir="$HOME/mydirectory"

相关内容