我有一个简单的bash脚本,到目前为止,只读取文件的每一行并打印出来。很简单:
while read i
do
echo $i
#otherViewDef=`grep -i $currentView $viewssqlfile`
done <$viewsdeffile
此脚本按预期工作,除非取消注释注释行。如果是这种情况,循环在回显文件的第一行后退出。我理解这不应该有效,因为currentView
和viewsqlfile
都未设置,但是这种行为的理由是什么,而不是报告错误并给出非零返回信号?
答案 0 :(得分:3)
我觉得有些不同;这可能不是实际的脚本,因为错误会有所不同。假设$currentView
已设置但$viewssqlfile
未设置,则分配执行
grep -i $currentView
从stdin读取,这意味着它会抓取$viewsdeffile
的内容。它找不到匹配项,因此不打印任何内容。之后,read i
无需读取,返回false,循环退出。
换句话说,如果循环的控制read
从重定向的stdin读取,请确保循环体中没有程序也尝试从stdin读取;他们都共享相同的标准。
将set -x
放置在顶部附近可能会提供一些见解。