【问题标题】:How to do operations with form values?如何对表单值进行操作?
【发布时间】:2019-07-25 12:12:13
【问题描述】:

所以我有一个包含 3 个文本字段的表单,其中两个,用户输入代码(和 OID),我用它来运行命令(snmpbulkwalk)。所以我想将这些命令的输出存储在一个变量中,比如说 var1 和 var2。

[]

但是,在最后一个文本字段中,我想对这些变量进行操作,例如:var1 - var2。

到目前为止我试过这个:

    @var1 = "nice -n 19 snmpbulkwalk -v 2c -c %snmp_community 
    %sensor_ip "+ "#{monitor_category_params[:oid].strip}"+" | awk 
    '/kB$/{ $(NF-1)= $(NF-1)*1024;} {print $0}'  | sed 's/ [A-Za- 
    z]*$//' | awk '{print $NF}' | grep -o '[[:digit:]]*' | paste -s 
    -d';' -"
    puts("var1 = " + "#{@var1}");

    @var2 = "nice -n 19 snmpbulkwalk -v 2c -c %snmp_community 
    %sensor_ip "+ "#{monitor_category_params[:oid2]}"+" | awk 
    '/kB$/{ $(NF-1)= $(NF-1)*1024;} {print $0}'  | sed 's/ [A-Za- 
    z]*$//' | awk '{print $NF}' | grep -o '[[:digit:]]*' | paste -s 
    -d';' -"
    puts("var2 = " + "#{@var2}");

    @var3 = "#{monitor_category_params[:snmp_oper].strip}"
    puts("var3 with {} = " + "#{@var3}");
    system = '$(#{@var3})'
    puts(system(system));

问题是我不知道如何将 shell 命令“nice -n 19 ...blabla”的输出存储在变量中。我像这样使用 exec 和反引号:

   exec "nice -n 19 snmpbulkwalk -v 2c -c %snmp_community %sensor_ip "+ "#{monitor_category_params[:oid].strip}"+" | awk '/kB$/{ $(NF-1)= $(NF-1)*1024;} {print $0}'  | sed 's/ [A-Za-z]*$//' | awk '{print $NF}' | grep -o '[[:digit:]]*' | paste -s -d';' -"

但它给了我这个错误,我没有得到它,因为命令格式正确。

   sh: -c: línea 0: EOF inesperado mientras se buscaba un `)' coincidente
   sh: -c: línea 1: error sintáctico: no se esperaba el final del fichero

我不知道我是否丢失了参数(%snmp_community 或 %sensor_ip),但最终结果应该类似于 system = number - number。但我只得到 system = var1 - var2,它什么都不做,因为我想要命令的输出,而不是变量的名称。

对不起,如果没有很好地解释我自己,提前谢谢你。

【问题讨论】:

    标签: ruby-on-rails ruby forms snmp oid


    【解决方案1】:

    所以假设这与 ruby​​ 或 ruby​​ on rails 有关 @var1 和 @var2 是某个类中方法的实例变量。
    您可以直接使用反引号直接保存到shell命令的输出

    @var1 = `ls`
    p @var1
    

    但是,一些 bash 命令不直接返回字符串值。

    到目前为止我还没有使用 snmpbulkwalk,但 $PATH 可能在某种程度上相似

    @var1 = `echo $PATH` #add you own shell code here to check
    p @var1
    

    【讨论】:

    • 您好,感谢您的回复。现在我只想专注于将该命令的输出存储在 var1 中。所以,现在我像你说的那样使用反引号 @var1 = ` command ` 我认为问题是我没有正确地在反引号内转义,例如:@var1 = ` nice -n 19 snmpbulkwalk -v 2c -c %snmp_community %sensor_ip ` + ` #{monitor_category_params[:oid].strip} ` 这告诉我 %sensor_ip 不存在,所以我猜参数没有通过?
    • 在这种情况下,首先创建一个字符串 str = ` nice -n 19 snmpbulkwalk -v 2c -c %snmp_community %sensor_ip ` + ` #{monitor_category_params[:oid].strip} ` 然后@var1 = echo str 然后 p @var1
    • 这不起作用,问题是一样的,它没有检测到参数。如果不是写 %sensor_ip 我把 IP 和社区一样,它可以工作,所以问题出在参数上。
    猜你喜欢
    • 1970-01-01
    • 2015-07-20
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2022-10-25
    • 2021-06-22
    相关资源
    最近更新 更多