0

我正在使用 Linux 编写游戏。

我有shell脚本:

//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

//注意'\"'是故意的

我希望 shell 在 COMMAND_LINE 中运行命令。由于某种原因,该命令不起作用,但是如果我将创建并存储在 COMMAND_LINE 中的字符串(回显的字符串)并通过 shell 运行它,则程序可以正常工作。

有什么建议么?

谢谢你

4

2 回答 2

0

您几乎必须使用以下之一:

eval $COMMAND_LINE
sh -c "$COMMAND_LINE"

但总的来说,这是一个令人担忧和危险的过程。如果您负责 in 中的完整字符串$COMMAND_LINE(没有用户输入),并且使用显示的值,那么它就足够安全了。如果用户可以将他们自己的 shell 脚本符号引入任何变量(例如$A$B$C),那么您将陷入痛苦的世界。

于 2013-04-09T02:12:43.497 回答
0

中嵌入的引号COMMAND_LINE被视为文字字符;他们没有引用扩展$A时的值。$COMMAND_LINE确实没有一种好的、安全的方法可以在 POSIX shell 中将变量的值作为命令执行。

如果您正在使用bash或其他支持数组的 shell,您可以尝试

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