【问题标题】:ksh ignores exactly two newlines when reading from /dev/tty从 /dev/tty 读取时,ksh 会忽略两个换行符
【发布时间】:2011-10-31 22:38:03
【问题描述】:

我们有一个 ksh 脚本,它正在从一个“while read line”中读取,输入通过管道传输到其中。同时,我们正在使用“read

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。

【问题讨论】:

  • 什么操作系统以及你从echo ${.sh.version}得到什么。祝你好运。
  • echo ${.sh.version} 给出:版本 M 1993-12-28 q
  • 使用 RHEL 运行 linux 内核 2.6.9-55.9.vm2.ELsmp
  • “x=dostuff $line”是问题中的错字,是我不熟悉的一些 ksh 语法,还是您真的在执行 $line 时将 x 设置为 'dostuff'?
  • 这是问题中的错字 - 抱歉!真正的问题在于“read y

标签: shell unix ksh


【解决方案1】:

听起来“dostuff”或“domorestuff”有时是从标准输入读取的。

尝试用“dostuff

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2023-04-09
    • 2023-03-25
    • 2011-06-17
    • 1970-01-01
    相关资源
    最近更新 更多