bash 스크립트의 getopts에서 stdout을 파이프하는 방법은 무엇입니까?

bash 스크립트의 getopts에서 stdout을 파이프하는 방법은 무엇입니까?

다음 스니펫이 있습니다.

#!/bin/bash

OPTIND=1
while getopts ":m:t" params; do
    case "${params}" in

        m)
             bar=$OPTARG ;;
        t)
            foo=$OPTARG ;;

        \?) 
            "Invalid option: -$OPTARG" >&2
            print_usage 
            exit 2
            ;;

        :)
            echo "Option -$OPTARG requires an argument." >&2
            print_usage
            exit 2
            ;;

        esac

done
shift "$(( OPTIND-1 ))"
echo "${foo}"  && echo  "${bar}"

이 스크립트를 통해 어떻게 stdout을 파이프할 수 있나요?

예를 들어:

echo "this is the test" | bash getoptscript.sh -m - 

다음을 제공해야 합니다. this is the test출력으로.

답변1

cat문자열을 명령줄 인수로 전달하는 대신 다음을 사용하여 스크립트의 표준 입력을 간단히 읽을 수 있습니다.

printf '%s\n' "$foo"
if [ "$bar" = "-" ]; then
    # assume data is on standard input
    cat
else
    print '%s\n' "$bar"
fi

답변2

입력을 다음으로 변환합니다.논쟁:

echo "this is the test" | xargs bash getoptscript.sh -m - 

결과는 다음과 같습니다.

bash getoptscript.sh -m - this is the test

관련 정보