管道服务器评估未正确返回

时间:2019-10-02 14:36:21

标签: bash

我对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对我来说是一种新语言,所以我确定我在这里缺少一些基本知识。

1 个答案:

答案 0 :(得分:1)

${val1}${val2}在定义时扩展,而不是评估时扩展,这意味着command_string的使用不会像您期望的那样“动态”。

考虑如下定义函数:

my_command ()
{
    cf service-key "$1" "$2"
}

并将代码中的函数用作

new_var=$(my_command "$val1" "$val2")

eval是不必要的,因为$(...)是用于评估附带命令内容的命令替换。