在read(stdin)循环后暂停bash脚本

时间:2014-12-20 23:42:25

标签: linux bash stdin

我正在创建一个通过管道(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
$

跳过我的最后read

然而;

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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