適切なPythonスクリプトを開始する前に、いくつかの引数を除外するブートストラップ(bash)があります。
問題は、スペースを含む文字列をブートストラップに渡すと、Pythonに到達すると壊れてしまうことです。
例:実行
./myBootStrap.sh --preload "argl bargl" -j -as -argl --postload "my Test"
これを印刷します
Executing myBootStrap --preload "argl bargl" -j -as -argl --postload "my Test"
そして私のPythonスクリプトはその引数を出力します
got arguments ['myBootStrap','--preload', '"argl', 'bargl"', '-j', '-as', '-argl', '--postload', '"my', 'Test"']
ご覧のとおり、「arglbargl」と「myTest」は、結合されたままではなく、['"argl'、'bargl"']と['"my'、'Test"']に分割されます。
私のコードの何が問題になっていますか?
ヒープに感謝します!
myBootStrap.sh
#!/bin/bash
declare -a argv
for ((i=1;i<=${#@};i+=1))
do
arg=${@:i:1}
if [[ "$arg" == "--preload"* ]];then
i=$i+1
marg=${@:$((i)):1}
preLoadO=$arg
preLoadA=" \"${marg}\""
argv=("${argv[@]}" $arg)
argv=("${argv[@]}" $preLoadA)
elif [[ "$arg" == "--postload"* ]];then
i=$i+1
marg=${@:$((i)):1}
postLoadO=$arg
postLoadA=" \"${marg}\""
argv=("${argv[@]}" $arg)
argv=("${argv[@]}" $postLoadA)
else
argv=("${argv[@]}" $arg)
fi
done
arguments=$(printf " %s" "${argv[@]}")
arguments=${arguments:1}
echo "Executing myBootStrap" $arguments
exec myBootStrap $arguments
およびPythonスクリプトmyBootStrap
#!/usr/bin/env python
import sys
print 'got arguments %s'%sys.argv