我有以下脚本。
for args
do
while read line; do
# do something
done <"$args"
done
如果脚本以文件名列表启动,则应逐行读出每个文件。
现在我正在寻找一种在没有文件名列表的情况下启动脚本时从stdin读取的方法,但我不想复制while循环。
有什么想法吗?
答案 0 :(得分:0)
你可以尝试:
args="$*"
if [ "$args" = "" ]; then
args=/dev/stdin;
fi
for arg in $args; do
while read -r line; do
# do something
done < "$arg";
done
答案 1 :(得分:0)
快速回答:
[[ -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
缺点:带空格的文件名将被解析为两个单词。
答案 2 :(得分:0)
以下应该做你想做的事:
cat "$@" | while read line; do
# something
done