2012-12-22 3 views
29

나는 bash는 일부 기능 세트를 가지고있는 출력 몇 가지 정보 :읽기 표준 입력

  • 발견-modelname에 -에 - 엡손 - PPDS
  • 발견-modelname에 -에 - 삼성 -ppds
  • 발견-modelname에 -에 - HP-PPDS
  • 등 ...

I 출력을 읽을 함수를 작성하고 필터링했습니다 :

function filter-epson { 
    find-modelname-in-epson-ppds | sed <bla-blah-blah> 
} 

function filter-hp { 
    find-modelname-in-hp-ppds | sed <the same bla-blah-blah> 
} 
etc ... 

을하지만 난 그게 더 좋을 같은 것을 할 것이라고 생각 :

function filter-general { 
    (somehow get input) | sed <bla-blah-blah> 
} 

을 한 후 다른 고에 전화 수준 기능 :

function high-level-func { 
    # outputs filtered information 
    find-modelname-in-hp/epson/...-ppds | filter-general 
} 

어떻게하면 최상의 bash 관행으로이를 달성 할 수 있습니까?

+0

, 이미 ('에 fname와'기능 fname'를 대체 할 수있다)'. –

+1

그 차이점은 무엇입니까? 간명 만? 그러나 나는'function'을 사용한 정의가 더욱 표현력있게 보인다 고 생각하지 않습니까? – likern

+1

_more 표현형이란 무엇입니까? [이 링크] (http://wiki.bash-hackers.org/scripting/obsolete)에서는 POSIX가 아니라 쓸모가없고 사용되지 않는 것을 볼 수 있습니다. –

답변

34

쓰기 문제는, How do I pass stdin to a bash function?입니다 다음 대답이

function filter-general { 
    sed <bla-blah-blah> 
} 
+0

이것은 bash 4.1.0에서 작동하지 않습니다. 출력을 얻습니다 : "HELLO WORLD \ n HELLO BOB \ N MATCH" – DocSalvager

+0

입력 문자열에'\ n'을 사용했기 때문입니다. 나는 대답을 편집했다. 이제는 단순화를 위해 입력 파일을 표시합니다. 이 질문은 함수에서'stdin'에 접근하는 것입니다 - 그리고 그 부분은 bash 2.05b에서도 작동합니다. :) – daveloyall

+1

아, 예 ... 에코가 이스케이프 시퀀스를 지원하지 않기 때문입니다. 이를 처리하는 또 다른 방법은 NL = "<여기에 입력하십시오>"와 같은 변수를 정의하고 "\ n"을 "$ NL"로 바꾸는 것입니다. 지금 일하고있어. 감사! – DocSalvager

5

sed으로 전화하십시오. 그게 전부 야.

쉘 스크립트 기능은 일반 stdin을 가지고 : 가끔

cat - | ... 
10

내가 표준 입력에서 배관을 해요 것을 고통스럽게 명시합니다 마치 명령이나 프로그램처럼. :)

input.txt를 :

HELLO WORLD 
HELLO BOB 
NO MATCH 

test.sh :

#!/bin/sh 

myfunction() { 
    grep HELLO 
} 

cat input.txt | myfunction 

출력 : 또한 일반적인 방법으로 처리되어 줄 인수를 명령

[email protected]:~/scratch$ ./test.sh 
HELLO WORLD 
HELLO BOB 

주, 이렇게 :

test2.sh :

#!/bin/sh 

myfunction() { 
    grep "$1" 
} 

cat input.txt | myfunction BOB 

출력 :

당신이 좋은 방법을 찾고 있다면
[email protected]:~/scratch/$ ./test2.sh 
HELLO BOB 
+0

필자는 필자가 "고통스럽게 노골적으로"할 필요가 있었다. 그렇지 않으면 작동하지 않았다. – Mahdi

+0

@Mahdi 무슨 뜻인가요? 이 경우/상황에서'cat -'을 사용해야하는 쉘이 있습니까? 어느? 언제? 방법? –

+0

나는 Hadoop map-reduce 작업에서 mapper로 실행되는 스크립트를 가지고 있으며 입력 내용은 stdin을 통해 나에게 전달된다. 추가 처리를 위해 전체 입력을 파일로 읽어야했습니다.이 솔루션이 저에게 효과적이었습니다. – Mahdi