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
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.
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
Tags bash pipe xargs io-redirection getopts