linux – 在读取(stdin)循环后暂停bash脚本

我正在创建一个通过管道(stdin)获取输入的脚本,如(other_command | my_script).但是,在我读完整个标准输入后,我需要暂停脚本并等待用户按下回车键.

这是一个示例脚本.

#!/bin/bash

if [[ -t 0 ]]; then
  echo "No stdin"
else
  echo "Got stdin"
  while read input; do
    echo $input
  done
fi

echo "Press enter to exit"
read

它就是这样的;

$echo text | ./script
Got stdin
text
Press enter to exit
$

它跳过我最后的阅读.

然而;

$./script
No stdin
Press enter to exit
stops here
$

从stdin读取后,如何让读取工作?是否有适用于Linux和OSX的解决方案?

解决方法:

您想要从用户那里读取.如果stdin不是用户,则必须从其他地方读取.典型的选择是当前终端(这里是连接到stderr的终端,假设有一个终端).

read -p "Press enter" < "$(tty 0>&2)"

默认情况下,tty在stdin上找到tty的名称,当stdin是管道时,这显然不起作用.因此,我们重定向使其看起来更像stderr.

上一篇:Python线程stdin / stdout


下一篇:你可以在Python的MS Windows上打开stdin作为文件吗?