Bash 使用管道从不同的shell读取行

Bash 使用管道从不同的shell读取行,bash,shell,unix,Bash,Shell,Unix,我在主脚本中收到一个参数($1),这是一个我应该阅读的文件。然后,我需要在这些行上执行一些操作,并返回“已修复”(在这些行上执行了操作,它们是新行)。我是这样做的: cat "$1" | isValidParameters isValidParameters返回新行,我现在想将其读入主脚本中的数组。我想做一些类似的事情: while read -r -a arr; do : done < $(cat "$1" | isValidParameters) 当我运行这个时,我根本没有

我在主脚本中收到一个参数($1),这是一个我应该阅读的文件。然后,我需要在这些行上执行一些操作,并返回“已修复”(在这些行上执行了操作,它们是新行)。我是这样做的:

cat "$1" | isValidParameters
isValidParameters
返回新行,我现在想将其读入主脚本中的数组。我想做一些类似的事情:

while read -r -a arr; do
    :
done < $(cat "$1" | isValidParameters)
当我运行这个时,我根本没有得到任何输出。
我运行的是:
/getdos>output.txt

注意:dos在我的目录中不是一个真实的文件,那些
isValidParameters
应该打印:
文件丢失

以下是
isValidParameters

#!/bin/bash
PATH=$PATH:.

if(($# != 1 && $# != 3)); then
    echo "Illegal or missing parameters"
    exit 1
fi

if [[ !(-f $1) ]]; then echo "File is missing";
    exit 1
 fi

#find . $1 \*.flat -print

function search_file() {
    #echo "$1"

    for line in "$1"/*; do 
        if [[ $line == *.flat  && -f "$line" ]]; then
            echo "$line"
         fi

        if [[ $line == *.flat  && -d "$line" ]]; then
            search_file "$line"
        fi
    done
}

while read line; do
    if [[ $line == *.flat  && -f "$line" ]]; then
        echo "$line"
     fi

     if [[ $line == *.flat  && -d "$line" ]]; then
        search_file "$line"
    fi
done < "$1"
#/bin/bash
路径=$PATH:。
如果($#!=1&$#!=3));然后
回显“非法或缺少参数”
出口1
fi
如果[!(-f$1)];然后回显“文件丢失”;
出口1
fi
#找到$1\*.平面打印
函数搜索_文件(){
#回音“$1”
对于“$1”/*”中的行,请执行以下操作
如果[[$line==*.flat&&f“$line”];则
回音“$line”
fi
如果[[$line==*.flat&&d“$line”];则
搜索文件“$line”
fi
完成
}
读行时;做
如果[[$line==*.flat&-f“$line”];然后
回音“$line”
fi
如果[[$line==*.flat&&d“$line”];然后
搜索文件“$line”
fi
完成<“$1”

读取-a
不会将多行读取到一个数组中;它将单行拆分为字段,并用这些字段填充数组。如果使用的是
bash
4,则可以使用
readArray
命令:

readArray -t arr < <(isValidParameters < "$1")

什么是
,因为
编辑问题,我会更具体地说明什么不起作用;请开始一个新的,而不是编辑这个。
readArray -t arr < <(isValidParameters < "$1")
while IFS= read -r line; do
    arr+=("$line")
done < <(isValidParameters < "$1")