我对bash相当陌生,并被要求开发一种可在gitlab上使用的管道过程。我在下面简化了变量符号。我的问题是,在本地运行良好的命令将无法在服务器上正确运行。
我有一个动态生成的$ command_string,看起来像这样:
command_string="cf service-key ${val1} ${val2}"
我可以在本地跑步
new_var=$(eval ${command_string})
但是,当此命令提交到服务器并作为管道运行时,它将中断。
我应该注意,当我删除new_var定义作为eval函数的输出时,它似乎正在运行。问题是我需要输出信息,以便可以从输出中提取信息。
此外,我尝试了new_var=$(bash -c ${command_string})
,但是它返回一个值,就像我只提交$ command_string的第一个“ cf”部分一样(即,它返回cf函数的帮助菜单,而不是返回的输出)。提供的参数)。
正如我所说,bash对我来说是一种新语言,所以我确定我在这里缺少一些基本知识。
答案 0 :(得分:1)
${val1}
和${val2}
在定义时扩展,而不是评估时扩展,这意味着command_string
的使用不会像您期望的那样“动态”。
考虑如下定义函数:
my_command ()
{
cf service-key "$1" "$2"
}
并将代码中的函数用作
new_var=$(my_command "$val1" "$val2")
。 eval
是不必要的,因为$(...)
是用于评估附带命令内容的命令替换。