我有以下片段:
#!/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}"
如何通过此脚本使用管道输出标准输出?
例如:
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
通过将输出传输到 xargs,将其输入转换为论点:
echo "this is the test" | xargs bash getoptscript.sh -m -
这将导致:
bash getoptscript.sh -m - this is the test