从不同位置逐行阅读请帮助避免重复的代码

时间:2011-04-14 06:48:09

标签: bash

我有以下脚本。

for args 
do 
        while read line; do
                # do something
        done <"$args"

done 

如果脚本以文件名列表启动,则应逐行读出每个文件。

现在我正在寻找一种在没有文件名列表的情况下启动脚本时从stdin读取的方法,但我不想复制while循环。

有什么想法吗?

3 个答案:

答案 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