如何使用Shell程序直接在STDOUT上显示结果?

时间:2018-10-04 17:24:53

标签: shell

这里的目标是在我按CTRL + D时在终端上直接在STDOUT上显示结果,首先,我尝试了很多事情来找到解决方案。

因此,当我执行./myprog.sh之类的程序时,它会等待回车,因此我们可以编写:

bob
cookie

我们按下CRTL + D,我想要这个结果:

bob
cookie
boy
dog

我的代码是:

while :
do
    read INPUT_STRING ||break
    case $INPUT_STRING in
    bob)
        echo "boy"
        ;;
    alicia)
        echo "girl"
        ;;
    cookie)
        echo "dog"
        ;;
    bye)
        break
        echo "      "
        ;;
    *)
        echo "unknown"
        ;;   
    esac

done

在终端中写了很多不同的东西后如何显示内容?

1 个答案:

答案 0 :(得分:0)

让我们从基础开始,什么是 Ctrl + D ?此键组合类似于文件结尾。这不是您可以捕获的信号,而是与文件有关的东西。因此,如果您希望在按下时进行操作 Ctrl + D ,您实际上是在说:

  

我想在/dev/stdin上创建一个文件,将其读入内存,然后对其执行各种操作。

中的示例为:

awk '{a[NR]=$0}END{for(i=1;i<=NR;++i) print i,a[i]}' -

在这里,它将完整的“文件”读入内存,当您按 Ctrl + D 时,您告诉awk已到达EOF并执行{{1 }}语句,先打印行号,再打印行。脚本末尾的END的简写。

现在,如果您想在shell中执行类似的操作,请说使其简单,您可以执行以下操作。

  1. 通过将完整的输入存储到数组或临时文件中,将其输入到内存中。按 Ctrl + D

  2. 即可完成阅读
  3. 随后处理输入。

这看起来像这样:

/dev/stdin