微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐