2017-08-30 156 views
0

我有几个嵌套目录,每个都包含proto文件,许多proto文件都依赖于位于根目录内某处的其他protos。我使用这个脚本来尝试编译它们,然后从一个包含protos文件夹和我希望编译的proto类去的文件夹的目录执行它。我现在遇到的其中一个问题是我收到protoc: command not found错误。在proto文件的嵌套目录上运行protobuf编译器的问题

set -e 

BASEDIR="$(greadlink -f $(dirname $0))" 
PROTO_DIR="$BASEDIR/new-protos-aug/" 
SWIFTPROTO_DIR="$BASEDIR/new-swift-protos-aug/" 
echo "Converting files from $PROTO_DIR to $SWIFTPROTO_DIR" 

FILES=$(find new-protos-aug -type f -name "*.proto") 

for proto in $FILES; do 
    PATH=${proto///[^ ]*\.proto/}; 
    PROTO_DIR="$BASEDIR/$PATH/" 
    protoc -I=$PROTO_DIR --swift_out=$SWIFTPROTO_DIR $proto; 
done 

关于如何最好地做到这一点的任何想法?

回答

0

忘了张贴我怎么解决这个问题。这样做的技巧(基本上只是列出了每个可能的子目录-I)

#!/bin/bash 
set -e 

BASEDIR="$(greadlink -f $(dirname $0))" 
PROTO_DIR="$BASEDIR/new-protos-aug/" 
SWIFTPROTO_DIR="$BASEDIR/new-swift-protos-aug/" 
echo "Converting files from $PROTO_DIR to $SWIFTPROTO_DIR" 

FILES=$(find new-protos-aug -type f -name "*.proto") 

for proto in $FILES; do 
    echo $proto; 
    echo "Running in $PROTO_DIR" 
    protoc -I="new-protos-aug" -I="new-protos-aug/bgs/low/pb/client" -I="new-protos-aug/bgs/low/pb/client/client" -I="new-protos-aug/bgs/low/pb/client/global_extensions" -I="new-protos-aug/bgs/low/pb/client/client/v1" -I="new-protos-aug/bgs/low/pb/client/client/v2" -I="new-protos-aug/google/protobuf" --swift_out="$SWIFTPROTO_DIR" "$proto"; 
done