2011-06-11 2 views
3

는 내가 명령 줄에서 실행할 수있는 루비 스크립트를 작성하려면 다른 FN에 공급하는 그 것이다 :루비 스크립트는

1. run a command line command like e.g. "ls -l" 
2. then I pass an argument for a specific column from the output of #1 
3. for each column specified in #2, it will run another command 

ls -l은 단지 예일 뿐이므로이를 일반화하고 싶습니다.

나는 루비에 대해 신물이났다. 아직 어떤 것을 얻지 못 했으므로, 무엇을 어떻게하면 좋았는지 말해 주면 나에게 도움이 될 것이다.

+0

귀하의 문제에 대한 설명이 다소 불투명합니다. 예제 호출과 스크립트의 의도 된 출력을 게시 할 수 있습니까? – sepp2k

답변

3

파이프 라인에서 자주 |awk '{print $5;}' (5을 원하는 색인화 된 열로 바꿉니다)을 사용합니다. 일부 재미있는 명령 줄 스위치를 사용하는 경우 ruby을 사용하여 비슷하게 쉽게 한 줄을 사용할 수 있습니다.

$ ls -l | awk '{print $5;}' 

404 
16 
10 
8733 

장소 코드 주위에 암시 while gets() do .. end 루프

$ ls -l | ruby -ne "a = split; puts a[4];" 
nil 
404 
16 
10 
8733 

ruby -n

대하고, ruby -e 명령 행에서 스크립트 요소를 전달합니다 비교. 두 가지를 합치면 perl -ne 또는 awk(1)과 비슷한 간단한 한 줄짜리 스크립팅 기능을 사용할 수 있습니다.

-a    Turns on auto-split mode when used with -n or 
       -p. In auto-split mode, Ruby executes 
         $F = $_.split 
       at beginning of each loop. 

후안 (작은 따옴표는 변수 참조로 $F[3] 해석에서, 내 껍질, bash(1) 방지) :

그것을 사용하는 방법을 지적한다 :

맨 페이지는 매우 유용 보이는 다른 옵션을 언급

$ ls -l | ruby -ane 'puts $F[3]' 
nil 
root 
root 
root 
root 
sarnold 
sarnold 
... 
+0

마지막 명령에 맞는 것은'ls -l | 루비 -ane '은 $ F [3]''을 넣습니다. BTW, 귀하의 회신은 나를 위해 매우 유용했습니다. 감사합니다 :) –

+0

@ Juan, 고마워요. – sarnold