美文网首页
iOS端gRPC批量转换Proto的sh脚本

iOS端gRPC批量转换Proto的sh脚本

作者: JxSr程知农 | 来源:发表于2020-07-18 10:35 被阅读0次
    #!/bin/bash
    #BaseFolder表示此文件所在的目录 注意要使用绝对路径。
    eval BaseFolder=`pwd`"/"
    #grpcSrcFolderEnter用于定位proto文件的目录。
    eval grpcSrcFolderEnter="../ProtosSrc/"
    eval grpcPluginFile=$BaseFolder"./Pods/!ProtoCompiler-gRPCPlugin/grpc_objective_c_plugin"
    eval grpcTargetFolder="./Pods/FkAppProtos/"
    eval linkTargetFolder1="./Pods/Headers/Private/FkAppProtos/"
    eval linkTargetFolder2="./Pods/Headers/Public/FkAppProtos/"
    
    function createIfNotExistDir () {
    #eval给变量赋值。
    eval targetDir=$1$2$3
    
    if [ -d $targetDir ]
    then
    echo $targetDir": File exists."
    else
    mkdir $targetDir
    echo $targetDir": created."
    fi
    }
    
    function generateProtosFromDir () {
    echo "======begin protos for "$1"======"
    #eval给变量赋值。local是为了防止其值在递归之后被修改 因为变量默认是全局的。
    local eval currFolder=$grpcSrcFolderEnter$1
    #遍历目录里面的文件/子文件夹。
    for file in `ls $currFolder`
    do
    #这里的-d表示是一个directory,即目录/子文件夹。
    if [ -d $currFolder"/"$file ]
    then
    #basename是提取文件名的关键字。
    createIfNotExistDir $grpcTargetFolder $1 `basename $file`
    #如果子文件夹则递归。
    generateProtosFromDir $1$file"/"
    else
    #读取该文件的地址。
    #echo $file
    if [[ $file == *.proto ]]
    then
    cd $BaseFolder$grpcSrcFolderEnter$1
    eval currOutFolder=$BaseFolder$grpcTargetFolder$1
    protoc --objc_out=$currOutFolder --grpc_out=$currOutFolder --plugin=protoc-gen-grpc=/usr/local/bin/protoc-gen-objcgrpc $file
    echo "generate protos for "$1$file
    cd $BaseFolder
    else
    echo "ignore "$currFolder$1$file
    fi
    fi
    done
    echo "======end protos for "$1"======"
    }
    
    function createLinkFile () {
    #源文件要相对于目标文件所在的目录 否则 若以后此工程根目录发生改变 则生成的替身会失效。
    local eval currSrcFile="./../../../../"
    #注意这里的for循环要有两层括号。
    for ((i=1;i<=$3;i++))
    do
    currSrcFile=$currSrcFile"../"
    done
    currSrcFile=$currSrcFile$grpcTargetFolder$1$2
    ln -sf $currSrcFile $linkTargetFolder1$1$2
    ln -sf $currSrcFile $linkTargetFolder2$1$2
    echo "create link for "$1$2
    }
    
    function createLinkFromDir () {
    echo "======begin link for "$1"======"
    #eval给变量赋值。local是为了防止其值在递归之后被修改 因为变量默认是全局的。
    local eval currFolder=$grpcTargetFolder$1
    local eval currSubFolderLayderNum=$2
    #遍历目录里面的文件/子文件夹。
    #for file in `ls $currFolder/*.h` #此遍历会忽略文件夹的。
    for file in `ls $currFolder`
    do
    #这里的-d表示是一个directory,即目录/子文件夹。
    if [ -d $currFolder"/"$file ]
    then
    #basename是提取文件名的关键字。
    createIfNotExistDir $linkTargetFolder1 $1 `basename $file`
    createIfNotExistDir $linkTargetFolder2 $1 `basename $file`
    #如果子文件夹则递归。
    createLinkFromDir $1$file"/" $currSubFolderLayderNum+1
    else
    #读取该文件的地址。
    #echo $file
    if [[ $file == *.h ]]
    then
    createLinkFile $1 `basename $file` $currSubFolderLayderNum
    else
    echo "ignore "$1$file
    fi
    fi
    done
    echo "======end link for "$1"======"
    }
    
    #函数定义结束,接下来可以运行函数。
    rm /usr/local/bin/protoc-gen-objcgrpc
    ln -s $grpcPluginFile /usr/local/bin/protoc-gen-objcgrpc
    subFolder="./"
    generateProtosFromDir $subFolder
    createLinkFromDir $subFolder 0
    

    相关文章

      网友评论

          本文标题:iOS端gRPC批量转换Proto的sh脚本

          本文链接:https://www.haomeiwen.com/subject/pwexkktx.html