问题描述
|
我有以下脚本。
for args
do
while read line; do
# do something
done <\"$args\"
done
如果脚本以文件名列表开头,则应逐行读取每个文件。
现在,我正在寻找一种方法,在启动脚本时从stdin读取文件而没有文件名列表,但是我不想复制while循环。
有任何想法吗?
解决方法
快速回答:
[[ -z $1 ]] && defaultout=/dev/stdin
for f in \"$@\" $defaultout; do
while read line; do
# do something
done < \"$f\"
done
缺点:未解析参数
第二次尝试:
[[ -z $1 ]] && defaultout=/dev/stdin
for f in $@ $defaultout; do
if [[ -f $f ]]; then
while read line; do
# do something
done < \"$f\"
fi
done
缺点:带空格的文件名将解析为两个单词。
,您可以尝试:
args=\"$*\"
if [ \"$args\" = \"\" ]; then
args=/dev/stdin;
fi
for arg in $args; do
while read -r line; do
# do something
done < \"$arg\";
done
,以下应该做您想要的:
cat \"$@\" | while read line; do
# something
done