2017-07-13 13 views
0

私はbashスクリプトにオプションの引数を持つpythonスクリプトを呼び出そうとしています。 この引数が関連する場合、プレフィックスフラグ(例:-o "value")を指定する必要があります。bashが外部スクリプトへのスペースを含む引数を渡しています

値にはスペースが含まれているため、周囲に引用符を付けました。ただし、この使用例ではですが、有効ではありません

これを回避するためのハックはありますか? ${extra_args}


test.py

#!/usr/bin/env python 
import argparse 


def main(): 
    parser = argparse.ArgumentParser() 
    parser.add_argument('-o', '--options', default='', type=str, required=False) 
    args = parser.parse_args() 
    print args.options 


if __name__ == '__main__': 
    main() 

tests.sh

#!/bin/bash 

export options="A B C" 

export extra_args="" 
if [ -n "${options}" ]; then 
    export extra_args="${extra_args} -o \"${options}\"" 
fi 

./tests.py $extra_args 

enter image description here

答えて

2

引用符がリテラルであり、をinterpありませんbashで拡張され、bash拡張は一度実行されます。

配列が必要なように見えますが、exportは子プロセス環境に変数を渡す必要があることをシェルに伝えることだけです。

extra_args=() 
if [ -n "${options}" ]; then 
    extra_args+=(-o "${options}") 
fi 

./tests.py "${extra_args[@]}" 
関連する問題