从/ dev / tty读取时,ksh会忽略两个换行符

时间:2011-10-31 22:38:03

标签: shell unix ksh

我们有一个ksh脚本,它正在读取一个'while read line',输入管道输入。同时我们用'read<读取用户确认输入/ dev / tty',类似于以下草图:

cat interestingdata | while read line ; do
    x=$(dostuff $line)
    if [[ x -ne 0 ]] ; then
        read y < /dev/tty
        $(domorestuff $y)
    fi
    echo "done optional stuff"
done

所有这些都适用于处理'interestingdata'的行,以及来自/ dev / tty的大多数读取。但是,在while循环的前两次迭代中,将忽略第一个字符串+换行符。

通过这个,我的意思是用户输入内容并按下回车键,脚本不会进展到“完成可选的东西”。相反,用户必须键入其他内容并再次按Enter键,然后才能继续执行脚本。

这只发生在while循环的前两次迭代中,然后一切都完美无缺。我有什么想法可以解决这个问题吗?我不知道我还能在这做什么!

如果有帮助的话,用ksh93运行linux内核2.6.9-55.9.vm2.ELsmp。

1 个答案:

答案 0 :(得分:0)

听起来像“dostuff”或“domorestuff”有时会从stdin读取。

尝试将“dostuff”替换为“dostuff&lt; / dev / null”,将“domorestuff”替换为“domorestuff&lt; / dev / null”,并查看行为是否发生变化。