从shell脚本中的变量运行shell命令

时间:2013-04-08 22:14:56

标签: shell

我正在使用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运行它,程序运行正常。

有什么建议吗?

谢谢

2 个答案:

答案 0 :(得分: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[@]}"

答案 1 :(得分:0)

你几乎必须使用以下其中一个:

eval $COMMAND_LINE
sh -c "$COMMAND_LINE"

但总的来说,这是一个充满危险和危险的过程。如果您负责$COMMAND_LINE中的完整字符串(没有来自用户的输入),并且显示的值已足够安全。如果用户可以将自己的shell脚本符号引入任何变量(例如$A$B$C),那么您将陷入伤害的世界。