2013-02-18 1 views
0

루비 스크립트에서 한 줄 ssh 호출을 만들려고합니다. 내 스크립트는 호스트 이름을 취한 다음 호스트 이름의 시스템 정보를 반환하도록 설정합니다.% x를 사용하여 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 :

을이 오류 또는 I $ 1의 앞에 슬래시를 포함하지 않으면 난 그냥 그 라인 빈 출력을 얻을. 이것에 대한 해결책이 있습니까? 나는 % q를 사용했기 때문에 그것이 될지도 모른다고 생각했지만, 큰 따옴표로도 일어납니다.

답변

0

따라서이 문제에 대한 해결책은 다음과 같습니다.

,
%q(users | wc -w | awk '{print \"Number of Users: \"\$1}') 
당신이 %q하지 %하지 %Q를 사용할 필요가

, 그리고 "" 당신은 어떤 AWK 변수 앞에 큰 따옴표와 달러 기호를 백 슬래시해야한다

누군가가 설명함으로써이 대답을 개선 할 수 있다면 왜, 그게 가장 인정 될 것입니까

users | awk '{ print \"Number of Users:\", NF }' 을 사용하여 스티브가 내 코드를 향상시킬 수 있다고 지적했는데 NF를 백 슬래시 할 필요가 없습니다.

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 }' 
+0

고맙습니다. 위의 내용을 사용하는 많은 명령을 개선 할 수 있습니다. ps -el | awk '{print $ 2}'| grep 'R'| wc -l | awk '{print "실행중인 프로세스 수 :"$ 1} "및'grep'모델 이름 '/ proc/cpuinfo | 유니크 | cut -d : -f2 | cut -d @ -f1 | awk '{print "모델 이름 :"$ 0} "'하지만 내 질문에는 실제로 대답하지 않았습니다. – snowe

+0

@ snowe2010 : 죄송합니다. 위의 업데이트를 참조하십시오. 건배. – Steve

관련 문제