2017-07-13 37 views
0

我試圖讓一個bash腳本調用帶有可選參數的python腳本。 當這個參數相關時,它必須提供一個前綴標誌(例如-o "value")。bash無法將包含空間的參數傳遞給外部腳本

由於該值包含空格,因此我在其中加入了引號。但是,在這個用例中,,它不是有效的

任何黑客可以解決它嗎?


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

報價在${extra_args}是文字,而不是插補bash擴展,bash擴展運行一次。

看起來你需要一個數組,導出也只是告訴shell該變量必須傳遞給子進程環境。

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

./tests.py "${extra_args[@]}" 
相關問題