우리 모두는 쉘 스크립트와 설치된 프로그램(예: 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