我在旧脚本中找到了以下功能:
f() { # < files list
typeset file
cat - > $TMPFILE # Bug in KSH
while read -r file
do
process $file
done < $TMPFILE
}
有没有人知道KSH中的这个错误?
答案 0 :(得分:2)
显然f()是一个过滤函数,即你应该在像这样的管道中使用它
./generate_filelist.sh | f
你希望read -r
能够很好地阅读stdin,例如做什么时
./generate_filelist.sh | while read -r file; do echo $file; done
显然,(某些)ksh(版本)中存在(是?)一个错误,它阻止了某个函数的运行:
f() {
typeset file
while read -r file # whoops not reading from stdin as it should?
do
process $file
done
}
我发现了两个错误,主要取决于你的平台:
可能会有(很多)更多的历史错误可以应用,我停止搜索,因为我对您的平台或脚本设计的平台一无所知。
因此,有一种解决方法,包括将stdin写入临时文件,并从中读取。注意
$$TMPFILE
,可能代替$TMPFILE
?)(除非KSH还有其他一个我不知道的功能,$$
扩展到当前流程Id))
f() {
typeset file
cat - > $TMPFILE
while read -r file
do
process $file
done < $TMPFILE
}