Como gerar stdout canalizado no script bash de getopts?

0

Eu tenho o seguinte snippet:

#!/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}"

Como posso produzir o stdout usando pipes através deste script?

Por exemplo:

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

E deve fornecer: this is the test como saída.

    
por fugitive 28.06.2017 / 14:27

2 respostas

0

Por canalizar a saída para xargs, que converte sua entrada em argumentos :

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

O que resultará em:

bash getoptscript.sh -m - this is the test
    
por 28.06.2017 / 14:40
1

Em vez de usar a string como argumento de linha de comando, você pode simplesmente usar cat para ler a entrada padrão do script:

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