0

私はrubyスクリプトから1行の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、ではなく%、ではなく、では%Qなくを使用"" する必要がある場合awk変数の前に二重引用符とドル記号をバックスラッシュする必要があります

誰かが理由を説明することによってこの答えを改善することができれば、それは最もありがたいです

スティーブが指摘したように、私はを使用してコードを改善することができたかもしれませんが、users | awk '{ print \"Number of Users:\", NF }' その場合、NFをバックスラッシュする必要はありません。

于 2013-02-18T00:49:43.113 に答える