bashrc 파일의 소스 함수로 파이프하는 방법은 무엇입니까?

bashrc 파일의 소스 함수로 파이프하는 방법은 무엇입니까?

우리 모두는 쉘 스크립트와 설치된 프로그램(예: grep, awk)으로 파이프하는 방법을 알고 있습니다. 하지만 .bashrc 또는 .zshrc의 소스 기능은 어떻습니까?

테스트 기능은 다음과 같습니다.

function fff(){
    echo "$@"
}

다음은 테스트 명령입니다.

$ echo "hello world" | fff

그것은 작동하지 않습니다

답변1

함수에는 표준 입력 스트림(파이핑할 때 가져오는)의 데이터가 아닌 명령줄 인수가 필요합니다.

당신이 할 수 있는 일은 함수에 명령줄 인수가 제공되는지 테스트하고, 그렇지 않은 경우 표준 입력 스트림으로 출력하는 것입니다.

fff () {
    if [ "$#" -gt 0 ]; then
       echo "$@"
    else
       cat
    fi
}

시험:

$ echo "hi there" | fff
hi there

또 다른 해결책은 원래 함수 정의를 다음 명령으로 바꾸는 것입니다.

fff "$( echo "hi there" )"

이는 $@함수에서 단일 문자열로 설정됩니다 hi there. 파이프된 데이터가 단일 문자열이거나 짧은 텍스트 줄인 경우 이는 완벽하게 유효한 솔루션입니다. 많은 양의 데이터를 처리하려면 위의 테스트에 표시된 대로 위 함수 정의의 호출을 일반적인 한 줄씩 접근 방식(사용 가능 awk) 으로 바꾸고 파이프에서 데이터를 읽는 것을 고려하세요.cat

관련 정보