在ruby内部使用%x进行SSH调用
我正在尝试从ruby脚本进行单行ssh调用。我的脚本获取一个主机名,然后开始返回主机名的机器信息在ruby内部使用%x进行SSH调用,ruby,string,bash,ssh,awk,Ruby,String,Bash,Ssh,Awk,我正在尝试从ruby脚本进行单行ssh调用。我的脚本获取一个主机名,然后开始返回主机名的机器信息 return_value = %x{ ssh #{hostname} "#{number_of_users}; #{number_of_processes}; #{number_of_processes_running}; #{number_of_processes_sleeping}; "} 变量的格式如下 number_of_users = %Q(users |
return_value = %x{ ssh #{hostname} "#{number_of_users}; #{number_of_processes};
#{number_of_processes_running}; #{number_of_processes_sleeping}; "}
变量的格式如下
number_of_users = %Q(users | wc -w | cat | awk '{print "Number of Users: "\$1}')
number_of_processes = %Q(ps -el | awk '{print $2}' | wc -l | awk '{print "Number of Processes: "$1}')
我已经尝试了%q、%q和简单的“”,但我无法让awk在输出之前打印任何内容。我要么得到这个错误(如果我包括冒号)
awk:第1行:在或附近出现语法错误:
或者如果我没有在$1前面加上斜杠,我只会得到该行的空输出。有什么解决办法吗?我想这可能是因为我使用了%q,但它甚至只用了双引号 使用反勾号捕获命令的输出并将输出作为字符串返回:
number_of_users = `users | wc -w | cat | awk '{print "Number of Users:", $1}'`
puts number_of_users
我的系统上的结果:
48
但您可以改进您的管道:
users | awk '{ print "Number of Users:", NF }'
ps -e | awk 'END { print "Number of Processes:", NR }'
因此,这个问题的解决方案是:
%q(users | wc -w | awk '{print \"Number of Users: \"\$1}')
必须使用%q
、非%
、非%q
和非“
您必须在任何awk变量前面反斜杠双引号和美元符号
如果有人能通过解释原因来改进这个答案,那将是非常感激的
尽管正如Steve指出的那样,我本可以使用users | awk'{print\“users:\”,NF}'
在这种情况下,就不需要反斜杠了。谢谢你,我猜我可以改进我在上面使用的很多命令,比如
ps-el | awk'{print$2}'| grep'R'| wc-l | awk'{print'运行的进程数:“$1}”“
和grep'model name'/proc/cpuinfo|uniq|cut-d:-f2|cut-d@-f1|awk'{print“model name:$0}'”
,但它并没有真正回答我的问题。