0

Linuxを使用してゲームをプログラミングしています。

私はシェルスクリプトを持っています:

//run.sh    
A="string1"
B="string2"
C="string3"

COMMAND_LINE="python ../file.py \"$A\" \"$B\" --flag1 ../file.txt --flag2 $C"
echo "$COMMAND_LINE"
$COMMAND_LINE

// ' \" ' は意図的なものであることに注意してください

シェルに COMMAND_LINE でコマンドを実行させたい。何らかの理由でコマンドが機能しませんが、作成されて COMMAND_LINE に保存された文字列 (エコーされた文字列) をシェルで実行すると、プログラムは正常に動作します。

助言がありますか?

ありがとうございました

4

2 に答える 2

0

に埋め込まれた引用符はCOMMAND_LINE、リテラル文字として扱われます。$Awhenが展開されたときの値を引用しません$COMMAND_LINE。変数の値をコマンドとして POSIX シェルで実行するための適切で安全な方法は実際にはありません。

bashまたは配列をサポートする別のシェルを使用している場合は、試すことができます

options=( ../file.py "$A" "$B" --flag1 ../file.txt --flag2 $C )
echo "python ${options[@]}"
python "${options[@]}"
于 2013-04-09T01:47:48.187 に答える
0

次のいずれかを使用する必要があります。

eval $COMMAND_LINE
sh -c "$COMMAND_LINE"

しかし、一般的に、それは困難で危険なプロセスです。完全な文字列$COMMAND_LINE(ユーザーからの入力なし) を担当していて、値が表示されている場合は、十分に安全です。ユーザーが独自のシェル スクリプト表記法を任意の変数 ( $A$Bまたは$Cなど) に導入できる場合、あなたは大打撃を受けます。

于 2013-04-09T02:12:43.497 に答える