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