0

我正在尝试从 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 | 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: line 1: syntax error at or near :

或者如果我没有在 $1 前面包含斜杠,我只会得到该行的空输出。有什么解决办法吗?我认为这可能是因为我使用了 %q,但它甚至只使用双引号。

4

2 回答 2

1

使用反引号捕获命令的输出并将输出作为字符串返回:

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 }'
于 2013-02-18T00:13:54.983 回答
0

所以这个问题的解决方法是:

%q(users | wc -w | awk '{print \"Number of Users: \"\$1}')

必须在哪里使用%q,not %,not %Q,and not"" 您必须在任何 awk 变量前使用反斜杠双引号和美元符号

如果有人可以通过解释原因来改进这个答案,那将不胜感激

尽管正如史蒂夫指出的那样,我可以使用users | awk '{ print \"Number of Users:\", NF }' 在这种情况下不需要反斜杠 NF 来改进我的代码。

于 2013-02-18T00:49:43.113 回答